O 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
- Exemplo de código em PHP para envio de emails pelo PHPMailer
- Mensagens de erro comuns do PHPMailer e suas soluções
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:
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 ) );