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 ) );