Muitos desenvolvedores de PHP precisam enviar e-mails a partir de seu código. A única função PHP que suporta isso diretamente é mail()
. No entanto, ele não fornece nenhuma assistência para o uso de recursos populares, como criptografia, autenticação, mensagens HTML e anexos.
Formatar e-mail corretamente é surpreendentemente difícil. Existem inúmeros padrões sobrepostos (e conflitantes), que exigem adesão rigorosa a regras de formatação e codificação terrivelmente complicadas – a grande maioria do código que você encontrará on-line que usa a função mail()
diretamente é simplesmente errado, se não inseguro!
A função PHP mail()
geralmente envia através de um servidor de correio local, normalmente liderado por um binário sendmail
nas plataformas Linux, BSD e macOS, no entanto, o Windows geralmente não inclui um servidor de correio local; O cliente SMTP integrado do PHPMailer permite o envio de e-mail em todas as plataformas sem a necessidade de um servidor de e-mail local. Esteja ciente, porém, que a função mail()
deve ser evitada sempre que possível; é mais rápido e seguro usar SMTP para localhost.
Por favor, não fique tentado a fazer isso sozinho – se você não usa o PHPMailer, existem muitas outras bibliotecas excelentes que você deve consultar antes de lançar a sua própria. Experimente SwiftMailer, Laminas/Mail, ZetaComponents, etc.
Este software é distribuído sob a licença LGPL 2.1, juntamente com o Compromisso de Cooperação GPL. Leia LICENSE para obter informações sobre a disponibilidade e distribuição do software.
O PHPMailer está disponível no Packagist (usando versionamento semântico), e a instalação via Composer é a forma recomendada de instalar o PHPMailer. Basta adicionar esta linha ao seu arquivo composer.json
:
"phpmailer/phpmailer" : " ^6.9.2 "
ou correr
composer require phpmailer/phpmailer
Observe que a pasta vendor
e o script vendor/autoload.php
são gerados pelo Composer; eles não fazem parte do PHPMailer.
Se você quiser usar a autenticação XOAUTH2, você também precisará adicionar uma dependência no pacote league/oauth2-client
e adaptadores de serviço apropriados em seu composer.json
, ou dar uma olhada no wrapper SendOauth2 do @decomplexity, especialmente se você estiver usando serviços da Microsoft.
Alternativamente, se você não estiver usando o Composer, você pode baixar o PHPMailer como um arquivo zip (observe que documentos e exemplos não estão incluídos no arquivo zip) e, em seguida, copiar o conteúdo da pasta PHPMailer em um dos diretórios include_path
especificados em sua configuração do PHP e carregue cada arquivo de classe manualmente:
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
Se você não estiver usando a classe SMTP
explicitamente (provavelmente não), não precisará de uma linha use
para a classe SMTP. Mesmo se você não estiver usando exceções, ainda precisará carregar a classe Exception
, pois ela é usada internamente.
PHPMailer 5.2 (que é compatível com PHP 5.0 – 7.0) não é mais suportado, mesmo para atualizações de segurança. Você encontrará a versão mais recente do 5.2 no branch 5.2-stable. Se você estiver usando PHP 5.5 ou posterior (o que deveria ser), mude para as versões 6.x.
As maiores mudanças são que os arquivos de origem agora estão na pasta src/
e o PHPMailer agora declara o namespace PHPMailerPHPMailer
. Isto tem vários efeitos importantes – leia o guia de atualização para obter mais detalhes.
Embora instalar o pacote inteiro manualmente ou com o Composer seja simples, conveniente e confiável, você pode querer incluir apenas arquivos vitais em seu projeto. No mínimo você precisará de src/PHPMailer.php. Se estiver usando SMTP, você precisará de src/SMTP.php, e se estiver usando POP antes do SMTP ( muito improvável!), você precisará de src/POP3.php. Você pode pular a pasta de idiomas se não estiver mostrando erros aos usuários e puder se contentar com erros somente em inglês. Se estiver usando o XOAUTH2, você precisará do src/OAuth.php, bem como das dependências do Composer para os serviços com os quais deseja se autenticar. Realmente, é muito mais fácil usar o Composer!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
Você encontrará muito o que brincar na pasta de exemplos, que abrange muitos cenários comuns, incluindo envio pelo Gmail, criação de formulários de contato, envio para listas de e-mail e muito mais.
Se você estiver reutilizando a instância (por exemplo, ao enviar para uma lista de discussão), poderá ser necessário limpar a lista de destinatários para evitar o envio de mensagens duplicadas. Veja o exemplo da lista de discussão para obter mais orientações.
É isso. Agora você deve estar pronto para usar o PHPMailer!
O padrão do PHPMailer é o inglês, mas na pasta do idioma, você encontrará muitas traduções para mensagens de erro do PHPMailer que você pode encontrar. Seus nomes de arquivos contêm código de idioma ISO 639-1 para as traduções, por exemplo fr
para francês. Para especificar uma linguagem, você precisa informar ao PHPMailer qual usar, assim:
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
Aceitamos correções e novos idiomas – se você estiver procurando por correções, execute o script Language/TranslationCompletenessTest.php na pasta de testes e ele mostrará todas as traduções faltantes.
Comece a ler no wiki do GitHub. Se você estiver tendo problemas, consulte o guia de solução de problemas, pois ele é atualizado com frequência.
Exemplos de como usar o PHPMailer para cenários comuns podem ser encontrados na pasta de exemplos. Se você está procurando um bom ponto de partida, recomendamos começar com o exemplo do Gmail.
Para reduzir a pegada de código implantada do PHPMailer, os exemplos não serão incluídos se você carregar o PHPMailer via Composer ou por meio do download do arquivo zip do GitHub, então você precisará clonar o repositório git ou usar os links acima para acessar os exemplos diretamente.
A documentação completa da API gerada está disponível online.
Você pode gerar documentação completa em nível de API executando phpdoc
na pasta de nível superior, e a documentação aparecerá na pasta docs
, embora você precise ter o PHPDocumentor instalado. Você pode achar que os testes de unidade são uma boa referência sobre como realizar várias operações, como criptografia.
Se a documentação não cobrir o que você precisa, pesquise as muitas perguntas no Stack Overflow e, antes de fazer uma pergunta sobre "Erro de SMTP: não foi possível conectar ao host SMTP.", leia o guia de solução de problemas.
Os testes do PHPMailer usam PHPUnit 9, com um polyfill para permitir que testes no estilo 9 sejam executados em versões mais antigas do PHPUnit e PHP.
Se isso não estiver passando, há algo que você possa fazer para ajudar?
Por favor, divulgue quaisquer vulnerabilidades encontradas de forma responsável – relate problemas de segurança aos mantenedores em particular.
Consulte os avisos de segurança do SECURITY e do PHPMailer no GitHub.
Envie relatórios de bugs, sugestões e solicitações pull para o rastreador de problemas do GitHub.
Estamos particularmente interessados em corrigir casos extremos, expandir a cobertura de testes e atualizar traduções.
Se você encontrou um erro nos documentos ou deseja adicionar algo, vá em frente e altere o wiki – qualquer pessoa pode editá-lo.
Se você tiver clones git anteriores à mudança para a organização PHPMailer GitHub, você precisará atualizar quaisquer URLs remotos que façam referência à localização antiga do GitHub com um comando como este de dentro do seu clone:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
Por favor, não use mais os projetos SourceForge ou Google Code; eles estão obsoletos e não são mais mantidos.
O tempo de desenvolvimento e os recursos do PHPMailer são fornecidos pelo Smartmessages.net, o único sistema de marketing por e-mail que prioriza a privacidade.
Doações são muito bem-vindas, seja em cerveja, camisetas ou dinheiro vivo e frio. O patrocínio através do GitHub é uma maneira simples e conveniente de dizer “obrigado” aos mantenedores e colaboradores do PHPMailer – basta clicar no botão “Patrocinar” na página do projeto. Se sua empresa usa PHPMailer, considere participar do programa de suporte empresarial da Tidelift.
Disponível como parte da assinatura Tidelift.
Os mantenedores do PHPMailer e de milhares de outros pacotes estão trabalhando com o Tidelift para fornecer suporte comercial e manutenção para os pacotes de código aberto que você usa para construir seus aplicativos. Economize tempo, reduza riscos e melhore a integridade do código, enquanto paga aos mantenedores dos pacotes exatos que você usa. Saber mais.
Veja o registro de alterações.
coolbru
em SF) e Andy Prevost ( codeworxtech
) assumiram o projeto em 2004.