PHPMailer: Como enviar email pelo PHP

phpmailer logoO PHPMailer é a biblioteca mais completa para enviar email com PHP. Atualmente, quase todos os provedores exigem autenticação de SMTP para realizar o envio de emails. Dessa forma, a tarefa de enviar emails usando o PHPMailer pelo PHP é bastante simples, bastando usar o código fonte de exemplo que iremos fornecer.

Este aplicativo possui total compatibilidade com SSL/TLS, bem como autenticação de SMTP. Trata-se de uma ferramenta bastante segura e atualizada. Provavelmente é o aplicativo mais usado para envio de emails pelo PHP.

Conteúdo:

Download inicial e instalação

Primeiramente é necessário fazer o download da biblioteca PHPMail através do nosso site neste link. Você também pode ver detalhes sobre o PHPMailer no site oficial, pelo Github neste link. A versão que nós disponibilizamos possui o arquivo PHPMailerAutoload.php , que facilita muito a inclusao e uso dele.

Por exemplo, usaremos a seguinte estrutura:

  • /public_html/enviar.php  – Nome do nosso arquivo que irá enviar o email
  • /public_html/PHPMailer-master/    –  Pasta contendo a biblioteca PHPMailer

Dessa forma, você precisa colocar todo o conteúdo do aplicativo na pasta PHPMailer-master , dentro do public_html.

Exemplo de código em PHP para envio de emails usando o PHPMailer

Basta copiar este código em seu PHP, alterando os parametros indicados. Observe os comentários no código e altere os campos de acordo com seu servidor. Alguns campos são opcionais. Dessa forma, escrevemos em um comentário indicando a utilidade dele. Enviar email pelo PHP é uma tarefa bastante simples, para quem usa esta ferramenta.

<?php   

// Inclui o arquivo class.phpmailer.php localizado na mesma pasta do arquivo php 
include "PHPMailer-master/PHPMailerAutoload.php"; 

// Inicia a classe PHPMailer 
$mail = new PHPMailer(); 

// Método de envio 
$mail->IsSMTP(); 

// Enviar por SMTP 
$mail->Host = "mail.meusitemodelo.com"; 

// Você pode alterar este parametro para o endereço de SMTP do seu provedor 
$mail->Port = 25; 


// Usar autenticação SMTP (obrigatório) 
$mail->SMTPAuth = true; 

// Usuário do servidor SMTP (endereço de email) 
// obs: Use a mesma senha da sua conta de email 
$mail->Username = 'francisco@meusitemodelo.com'; 
$mail->Password = 'senha-do-email'; 

// Configurações de compatibilidade para autenticação em TLS 
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); 

// Você pode habilitar esta opção caso tenha problemas. Assim pode identificar mensagens de erro. 
// $mail->SMTPDebug = 2; 

// Define o remetente 
// Seu e-mail 
$mail->From = "francisco@meusitemodelo.com"; 

// Seu nome 
$mail->FromName = "Francisco"; 

// Define o(s) destinatário(s) 
$mail->AddAddress('maria@gmail.com', 'Maria'); 

// Opcional: mais de um destinatário
// $mail->AddAddress('fernando@email.com'); 

// Opcionais: CC e BCC
// $mail->AddCC('joana@provedor.com', 'Joana'); 
// $mail->AddBCC('roberto@gmail.com', 'Roberto'); 

// Definir se o e-mail é em formato HTML ou texto plano 
// Formato HTML . Use "false" para enviar em formato texto simples ou "true" para HTML.
$mail->IsHTML(true); 

// Charset (opcional) 
$mail->CharSet = 'UTF-8'; 

// Assunto da mensagem 
$mail->Subject = "Assunto da mensagem"; 

// Corpo do email 
$mail->Body = 'Aqui entra o conteudo texto do email'; 

// Opcional: Anexos 
// $mail->AddAttachment("/home/usuario/public_html/documento.pdf", "documento.pdf"); 

// Envia o e-mail 
$enviado = $mail->Send(); 

// Exibe uma mensagem de resultado 
if ($enviado) 
{ 
    echo "Seu email foi enviado com sucesso!"; 
} else { 
    echo "Houve um erro enviando o email: ".$mail->ErrorInfo; 
} 


?>

Mensagens de erro comuns do PHPMailer e suas soluções

Algumas mensagens de erro são bastante frequentes ao enviar email pelo PHP. Para solucionar erros do PHPMailer, primeiramente, é necessário habilitar o debug. Basta remover o comentário (removendo as duas barras “//”), desta linha:

$mail->SMTPDebug = 2;

Dessa forma, a aplicação exibirá na tela todos os detalhes durante o envio do email. Por exemplo:

debug do phpmailer

Solucionando o erro SMTP connect() failed

Este erro pode ter várias causas. Com o debug habilitado, vamos enumerar cada possível motivo, bem como suas soluções.

SMTP ERROR: Failed to connect to server: php_network_getaddresses: getaddrinfo failed: Name or service not known (0)

Esta mensagem ocorre pois o hostname do servidor SMTP está incorreto. Verifique se digitou o endereço do SMTP corretamente. Tente também usar o endereço IP no lugar do hostname. Verifique também se o servidor DNS do seu domínio está configurado corretamente. Dessa forma, para solucionar o problema, você precisa corrigir a seguinte linha:

$mail->Host = "mail.meusitemodelo.com";

535 Incorrect authentication data

Ocorre devido a um erro no login e/ou na senha no PHPMailer. Verifique se sua conta de e-mail está criada no servidor. Caso não esteja, é necessário criar a conta de email. Verifique também se a senha do seu email está correta. Você também pode resetar a senha do seu email.

Em seguida, edite e faça a correção nestas linhas:

$mail->Username = 'francisco@meusitemodelo.com'; 
$mail->Password = 'senha-do-email'; 

SMTP ERROR: Password command failed: 535 Incorrect authentication data

Significa que a senha está incorreta. Dessa forma, verifique se não digitou errado sua senha. Ainda, você pode resetar a senha do seu email. A correção precisa ser feita nesta linha:

$mail->Password = 'senha-do-email';

SMTP ERROR: Failed to connect to server: Connection refused (111)

Este erro significa que o servidor SMTP recusou a conexão. A causa mais comum é um erro na porta SMTP. Recomendamos usar a porta 587 ao invés da 25. Você precisa alterar a porta nesta linha:

$mail->Port = 25;

Outra possível causa para este erro é o fato de você não estar usando a autenticação TLS/SSL na conexão. Verifique se esta linha a seguir está presente em seu código. Ela habilita o uso de TLS/SSL para que seja realizada uma conexão segura.

$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );

Este artigo foi útil?

Obrigado pela resposta!
Gustavo Carvalho

Gustavo Carvalho

Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do Bóris, seu pet de estimação. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos técnicos.

Contato: gustavo.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!