PHPMailer: Envio de e-mails com PHP
Enviar e-mails é uma necessidade frequente em diferentes projetos. Aprenda neste conteúdo como utilizar a biblioteca PHPMailer para enviar e-mails em seu projeto PHP.
Introdução
PHPMailer é uma biblioteca para envio de emails escrita em PHP, que possui uma implementação do protocolo SMTP, o que a torna independente de plataforma. Com ela, a partir de uma API de alto nível podemos enviar e-mails para mais de uma conta ao mesmo tempo, copiar mensagens para outras conta, CC, ou separar as mensagens em cópia, BCC.
Além disso, essa biblioteca também suporta o envio de mensagens em HTML/TXT, disponibilizando ainda um modo no qual a mensagem possui mais de uma versão, em ambos os formatos, para clientes que não suportam HTML.
Uma outra vantagem dessa biblioteca é o suporte a múltiplos mecanismos autenticação SMTP, como LOGIN, PLAIN, NTLM, CRAM-MD5 e o XOAUTH2 da Google por SSL ou TLS. Com ele também é possível usar assinatura DKIM e S/MIME.
Todas essas funcionalidades estão disponíveis para projetos que utilizem o PHP 5.0 ou superior.
Neste conteúdo veremos como enviar emails com o PHPMailer através do SMTP do Gmail, smtp.gmail.com.
Ir para o códigoDownload e Instalação
A instalação do PHPMailer pode ocorrer de duas formas: pelo Composer ou realizando o download do código fonte compactado na página oficial do projeto no GitHub.
Configurar os dados de Acesso ao servidor de envio de e-mails. Nós utilizamos o smtp.gmail.com
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = 'mailcurso702@gmail.com';
$mail->Password = '';
Configurar as contas para as quais você deseja enviar a mensagem
$mail->setFrom('mailcurso702@gmail.com', 'Meu Nome');
$mail->addReplyTo('replyto@meusite.com', 'Meu Nome');
$mail->addAddress('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->addCC('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->addBCC('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->Subject = 'Envio de email';
Também o que você deseja enviar na mensagem, como HTML, texto e anexos...
$mail-> Charset = 'UTF-8';
$mail-> msgHTML("< p >Mensagem de < b >boas-vindas< /b >!< /p >");
$mail-> AltBody = 'Mensagem de boas-vindas');
$mail->addAttachment(_DIR_ .'/logo-devmedia.png');
Por fim, basta chamar a função send(), que realiza o envio do e-mail
if (!$mail -> send()){
die ("Erro no envio do e-mail: {$mail -> ErrorInfo}");
}echo 'Mensagem enviada com sucesso';
Para instalar via Composer, adicione a linha "phpmailer/phpmailer": "~5.2" ao seu composer.json e então utilize o comando abaixo:
composer require phpmailer/phpmailer
Se ainda não possui familiaridade com o composer, recomendamos o curso O que é Composer.
Também é possível descompactar os arquivos da biblioteca no seu projeto, após realizar o download.
Enviando emails
Após ter a biblioteca inserida no projeto, devemos incluir o autoloader do PHPMailer para ter acesso às suas classes e funções. Logo em seguida, devido à sua API de alto nível, podemos realizar algumas configurações, usando para isso uma instância da classe PHPMailer e então chamar a função send() para disparar a mensagem através de um servidor de envio.
Configurar os dados de Acesso ao servidor de envio de e-mails. Nós utilizamos o smtp.gmail.com
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = 'mailcurso702@gmail.com';
$mail->Password = '';
Configurar as contas para as quais você deseja enviar a mensagem
$mail->setFrom('mailcurso702@gmail.com', 'Meu Nome');
$mail->addReplyTo('replyto@meusite.com', 'Meu Nome');
$mail->addAddress('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->addCC('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->addBCC('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->Subject = 'Envio de email';
Também o que você deseja enviar na mensagem, como HTML, texto e anexos...
$mail-> Charset = 'UTF-8';
$mail-> msgHTML("< p >Mensagem de < b >boas-vindas< /b >!< /p >");
$mail-> AltBody = 'Mensagem de boas-vindas');
$mail->addAttachment(_DIR_ .'/logo-devmedia.png');
Por fim, basta chamar a função send(), que realiza o envio do e-mail
if (!$mail -> send()){
die ("Erro no envio do e-mail: {$mail -> ErrorInfo}");
}echo 'Mensagem enviada com sucesso';
Um exemplo completo desse código pode ser visto a seguir.
include_once __DIR__ . '/phpmailer/PHPMailerAutoload.php';
$mail = new \PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = 'mailcurso702@gmail.com';
$mail->Password = '';
$mail->setFrom('mailcurso702@gmail.com', 'Meu Nome');
$mail->addReplyTo('replyto@meusite.com', 'Meu Nome');
$mail->addAddress('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->addCC('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->addBCC('samuel-vicente-moraes@outlook.com', 'Moraes');
$mail->Subject = 'Envio de email';
$mail->CharSet = 'UTF-8';
$mail->msgHTML("<p>Mensagem de <b>boas-vindas</b>!</p>");
$mail->AltBody = 'Mensagem de boas-vindas';
$mail->addAttachment(__DIR__ . '/logo-devmedia.png');
if (!$mail->send()) {
die("Erro no envio do e-mail: {$mail->ErrorInfo}");
}
echo 'Mensagem enviada com sucesso';
Configurando o servidor de envio
As informações de acesso ao servidor de envio podem mudar de acordo com o serviço escolhido. No exemplo acima estamos disparando a mensagem pelo servidor do Gmail, saiba mais sobre os passos necessários para autenticação.
Esta documentação nos orienta utilizar $mail->isSMTP(), pois usaremos autenticação SMTP; $mail->Host, para que a autenticação seja feita no servidor SMTP do Gmail; $mail->Port, como porta; e $mail->SMTPSecure como protocolo de autenticação, além de $mail->SMTPAuth, visto que nós solicitaremos a autenticação por usuário e senha, definidos com $mail->Username e $mail->Password.
Inserindo endereços de envio e recebimento
Com a função $mail->setFrom() definimos o e-mail de origem da mensagem. Essa função recebe um segundo argumento opcional com o nome da pessoa ou entidade que está enviando o e-mail.
Em alguns casos, exibir o e-mail de origem não é necessário, ou desejamos que as respostas caiam em uma conta diferente da utilizada para enviar a mensagem. Para isso podemos usar a função $mail->addReplyTo(), para a qual informamos a conta que receberá as respostas.
O destinatário é definido na função $mail->addAddress(), que pode ser chamada tantas vezes quanto forem necessárias para incluir todos os destinatários na mensagem.
Título e corpo da mensagem
A propriedade $mail->Subject recebe o título do e-mail a ser enviado. A mensagem incluída neste e-mail pode ser informada como String para o método $mail->msgHTML(), que também pode receber a localização de um arquivo HTML como parâmetro, e ainda um texto opcional pode ser usado para clientes sem suporte a HTML, através da propriedade $mail->AltBody.
Caso a mensagem enviada apresente problemas com a exibição de alguns caracteres, podemos usar a propriedade $mail->CharSet para determinar codificação mais adequada. Neste caso utilizamos UTF-8.
Cópia e cópia oculta
Além da função $mail->addAddress(), também podemos utilizar $mail->addCC(), para adicionar uma pessoa em cópia, ou $mail->addBCC(), para incluir um endereço que não terá conhecimento dos demais incluídos na mensagem.
Anexando arquivos
PHPMailer também suporta o envio de anexos de diferentes tipos. Para demonstrar essa funcionalidade, neste exemplo incluímos uma imagem contendo o logotipo da empresa. Isso pode ser realizado com a função $mail->addAttachment(), que recebe como parâmetro a localização do arquivo.
Depuração
Apesar da API de alto nível do PHPMailer, que resolve boa parte dos problemas, algumas vezes precisamos testar as configurações, até que tudo esteja de acordo com o exigido pelo servidor de envio. Para auxiliar o programação nesse processo podemos habilitar o modo de depuração que, quando ativo, oferece mensagens adicionar sobre cada passo em segundo plano pela biblioteca.
Para isso utilizamos a propriedade $mail->SMTPDebug, que recebe valores de 0 a 3, de acordo com o nível de profundidade que desejamos depurar. Quanto mais alto o valor, mais detalhada será a mensagem de retorno.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo