Como mandar um e-mail utilizando servidor de SMTP com autenticação pelo PHP.
Para enviar e-mails pelo PHP iremos utilizar das classes prontas que irão encurtar o nosso trabalho.
Clique nos link abaixo para baixar:
Descompacte o arquivo e cole as duas classes no diretório aonde está o arquivo PHP que irá enviar os e-mails.
Código fonte de exemplo
Crie um arquivo PHP de teste no mesmo diretório aonde está as duas classes.
Logo no inicio do arquivo vamos utilizar a função “require_once” para incluirmos a classe “class.phpmailer.php”.
require_once("class.phpmailer.php");
Configurando PHPMailer
Agora vamos configurar a nossa classe PHPMailer para utilização.
Primeiro você deve substituir os valores de teste nas variáveis abaixo com os dados reais do servidor SMTP que será utilizado.
$servidor_smtp = "smtp.teste.com.br"; $porta = "587"; $usuario = "[email protected]"; $senha = "123456";
Observação: Por padrão, normalmente a porta utilizada nos servidores de SMTP é a “587”
Agora vamos instanciar a classe PHPMailer.
$mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 1; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Host = $servidor_smtp; $mail->Port = $porta; $mail->Username = $usuario; $mail->Password = $senha;
No código acima, além de passar os dados do SMTP utilizo as seguintes configurações
Ativo o SMTP no objeto
$mail->IsSMTP();
Modo “debug”, informe 1 para erros e mensagens ou número 2 para apenas mensagens
$mail->SMTPDebug = 1;
Informe que a autenticação será necessária no servidor de SMTP.
$mail->SMTPAuth = true;
Modo de segurança que será utilizado, podendo ser “tls” ou “ssl”.
$mail->SMTPSecure = "tls";
Definindo conteúdo, remetente e ddestinatário do email
Substituí os valores da variáveis abaixo com os dados que você deseja enviar.
$de = "[email protected]"; $de_nome = "nome remetente"; $assunto = "assunto de teste"; $corpo = "email de teste"; $para = "[email protected]"; $mail->SetFrom($de, $de_nome); $mail->Subject = $assunto; $mail->Body = $corpo; $mail->AddAddress($para);
Observações: Em alguns servidores de SMTP, por questões de segurança e anti-spam, o usuário utilizado na autenticação (email) deverá ser o mesmo utilizado no “de” da função “SetFrom()”.
Enviando o e-mail
Utilize o código abaixo para enviar o e-mail
if($mail->Send()) { // enviado } else { // ocorreu um erro }
Você pode adicionar as validações no código acima.
Verificando os erros
Observação: no modo “debug” com o valor “2” as mensagens de erro serão incluídas diretamente no arquivo.
Caso os e-mails não estejam sendo enviados e nenhuma mensagem de erro está sendo exibida leve em consideração os seguintes pontos:
- congestionamento no servidor de e-mail
- o e-mail está sendo enviado porém está caindo na caixa de spam ou black list
- valide se os dados do destinatário estão corretos
- o servidor aonde está rodando seu arquivo PHP está bloqueando o envio do email (por exemplo: Godaddy não permite o envio de e-mails utilizando servidores de SMTP externos).
Código fonte completo
/* Configurações */ $servidor_smtp = "smtp.teste.com.br"; $porta = "587"; $usuario = "[email protected]"; $senha = "123456"; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 1; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Host = $servidor_smtp; $mail->Port = $porta; $mail->Username = $usuario; $mail->Password = $senha; /* Conteúdo e destinatario */ $de = "[email protected]"; $de_nome = "nome remetente"; $assunto = "assunto de teste"; $corpo = "email de teste"; $para = "[email protected]"; $mail->SetFrom($de, $de_nome); $mail->Subject = $assunto; $mail->Body = $corpo; $mail->AddAddress($para); if($mail->Send()) { // email foi enviado } else { // ocorreu um erro }