Atualizado em 30 de Agosto de 2013

Como Enviar Email Autenticado com PHP

Olá pessoal,

Todos nos já sabemos como enviar email com php, porém alguns hosts só permitem que sejam enviados os email que são autenticados pelo servidor.

Para realizar este procedimento precisamos fazer esta autenticação antes de enviar o email. Neste post vamos ver como enviar email autenticado com PHP, fazendo uso da classe PHPMailer.

O PHPMailer é uma classe pronta para o envio de emails através das conexões SMTP e POP3, para baixar a classe Clique aqui.

Vamos ver um exemplo usando a classe PHPMailer para envio de emails autenticados:

<?php
// Chame o arquivo com as Classes do PHPMailer
require_once('phpmailer/class.phpmailer.php');

// Instância a classe PHPMailer
$mail = new PHPMailer();

// Configuração dos dados do servidor e tipo de conexão (Estes dados você obtem com seu host)
$mail->IsSMTP(); // Define que a mensagem será SMTP
$mail->Host = "smtp.seudominio.com.br"; // Endereço do servidor SMTP
$mail->SMTPAuth = true; // Autenticação (True: Se o email será autenticado ou False: se o Email não será autenticado)
$mail->Username = 'email@seudominio.com.br'; // Usuário do servidor SMTP
$mail->Password = 'sua senha'; // A Senha do email indicado acima

// Remetente (Identificação que será mostrada para quem receber o email)
$mail->From = "e-mail@seudominio.com.br";
$mail->FromName = "Nome do Remetente ";

// Destinatário
$mail->AddAddress('destinatario@dominio.com.br', 'Nome do Destinatário');

// Opcional (Se quiser enviar cópia do email)
$mail->AddCC('copia@dominio.com.br', 'Copia');
$mail->AddBCC('CopiaOculta@dominio.com.br', 'Copia Oculta');

// Define tipo de Mensagem que vai ser enviado
$mail->IsHTML(true); // Define que o e-mail será enviado como HTML

// Assunto e Mensagem do email
$mail->Subject = "Mensagem Teste"; // Assunto da mensagem
$mail->Body = 'Aqui vem a mensagem a ser enviada, em HTML ou não.';

// Envia a Mensagem
$enviado = $mail->Send();

// Verifica se o email foi enviado
if($enviado)
 {
  echo "E-mail enviado com sucesso!";
 }
else
 {
  echo "Não foi possível enviar o e-mail, devido ao erro de: ".$mail->ErrorInfo;
 }
?>

No script já tem os comentários explicando cada função e parâmetros. Quaisquer dúvidas cometem pessoal.

Para fazer download do script Clique aqui.


Curta a nossa página



E isso aí pessoal, até a próxima.

Comentários

Sua foto do perfil

Charlies

aqui esta dando o seguinte erro:

Language string failed to load: from_failed (meu email)

se puderem me ajudar fico muito agradecido :)

27 de Outubro de 2015 - 18:23

Sua foto do perfil

Mauricio Programador

Olá Charlies,

Faça download do exemplo e teste em seu servidor para ver se ele funciona.

Caso funcione o problema pode ser na plataforma que esta usando, pois este erro que esta lhe mostrando não me parece ser do PHPMailer.

Abraço.

30 de Outubro de 2015 - 14:55

Sua foto do perfil

Elton

Olá. Obrigado pelas dicas. Ajudaram-me bastante. Tenho uma única dúvida:
Como posso fazer para que a resposta do e-mail (ReplyTo) seja feita para o e-mail da pessoa que foi cadastrado no formulário?
Aqui na página o exemplo está assim:

$mail -> AddReplyTo("email@remetente.com", $mail -> FromName);

Então penso que seria algo do tipo:

$mail -> AddReplyTo("$emailcadastrado", $mail -> FromName);

Eu fiz alguns testes, mas nenhum funcionou.
Muito obrigado.

05 de Abril de 2015 - 15:51

Sua foto do perfil

Mauricio Programador

Olá Elton,

Não sei o que pode estar ocorrendo ai, mas para fazer esta ação, basta usar o código que você mesmo indicou:

$mail->addReplyTo('contato@email.com.br', 'Teste');

Teste digitando sem usar variáveis, para ver se as variáveis realmente estão trazendo os valores certos.

Abraço.

06 de Abril de 2015 - 09:30

Sua foto do perfil

Elton

Achei a solução, Mauricio. Testei e deu tudo certo. Deixo aqui a solução para ajudar outras pessoas. Basta utilizar esse código:

$mail->AddReplyTo("$email");

Assim o e-mail enviado no formulário no campo "email" será usado para o ReplyTo. Na prática, ao receber o e-mail e clicar em "Responder" a resposta será enviada para o e-mail do visitante e também para o e-mail padrão (SetFrom) usado no código para envio.

Resumindo... Eu usei estes códigos para configurar o recebimento do formulário e funcionou ok:

$mail->SetFrom('email@email.com.br'); // Deve ser o mesmo e-mail usado como Username na autenticação do servidor SMTP
$mail->FromName = utf8_decode("$nome"); // Mostra o nome da pessoa cadastrado no formulário
$mail->AddAddress('email@email.com.br', 'Nome do Destinatário'); // Define o destino da mensagem
$mail->AddCC('emailcopia@email.com.br', 'Nome da Cópia'); // Envia uma cópia
$mail->AddBCC('emailcopiaoculta@email.com.br', 'Nome da Cópia Oculta'); // Envia uma cópia oculta
$mail->AddReplyTo("$email"); // Envia resposta para o e-mail do visitante
$mail->Subject = 'Formulário de contato'; // Assunto do formulário

07 de Abril de 2015 - 09:45

Sua foto do perfil

Mauricio Programador

Legal Elton,

obrigado por compartilhar conosco.

Grande abraço.

07 de Abril de 2015 - 09:45

Sua foto do perfil

Celso Redes

Ola Mauricio, eu adicionei "$mail->Port = 587";
e funcionou 100%.

Obrigado por compartilhar conhecimento.

Celso Redes

02 de Março de 2015 - 10:49

Sua foto do perfil

Mauricio Programador

Olá Celso,

legal a sua dica, alguns servidor hoje em dia estão pedindo isso como obrigatório.

Grande Abraço.

02 de Março de 2015 - 12:40

Sua foto do perfil

CHARLES CORREA

Grande Mauricio sempre trazendo coisa boa pra gente.

Olha complementando o script seria de bom agrado adicionar

$mail -> AltBody = SUA MENSAGEM EM TEXTO PURO;
// Mensagem de Texto

a AltBody Serve exatamente para enviar sua mensagem em texto puro caso o leitor de emails do destinatário não aceite conteúdo em HTML e isto deve ser adicionado abaixo do

$mail->Body


// Setamos qual é o tamanho do texto por linha pra
// quebrar a linha de forma automática com o WordWrap
$mail -> WordWrap = 50;

Podemos também visualizar o debugger da classe para verificar se houve algum erro

$mail->SMTPDebug = 2;
// permite que informações de depuração SMTP (para testes)
// 1 = Apresenta mensagens debug
// 2 = Somente envia a mensagem sem apresentar debug


Lembrando que com o PHPMailer também é possível enviar e-mails usando a função mail() do PHP

Segue abaixo exemplo para quem quiser usar

<?php

$MensagemHTML = " <p><b>sua <u><i>mensagem</i></u> em <font color='#0000FF'>html</font> aqui</b></p> ";

$MensagemTXT = " sua mensagem em txt ";


include "class.phpmailer.php";

$msg = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";

$msg .= "<html>";

$msg .= "<head></head>";

$msg .= "<body style='background-color:#ffffff;'>";

$msg .= $MensagemHTML;

$msg .= "</body>";

$msg .= "</html>";

/*
* Neste exemplo estaremos usando a função mail() do php
* juntamente com a classe PHP-Mailer
* para enviar os emails, afim de facilitar a notificação
* de segurança e também caso o administrador geral não
* tenha informado os dados de conexão SMTP ao
* sistema.
*
*/

$mail = new PHPMailer();

$mail -> IsMail(true);

$mail -> IsHTML(true);

$mail -> CharSet = "UTF-8";
// use ISO-8895-1 ou UTF-8

$mail -> From = "email@remetente.com";
//Remetente
// email do remetente

$mail -> FromName = "nome do remetente";
// Nome do Remetente
// nome do remetente

$mail -> AddAddress("email@cliente.com", "cliente");
// email que receberá o email

//$mail -> AddCC("emailcopia@cliente.com","Cliente"); //
// Copia

$mail -> AddBCC("emailcopiaoculta@cliente.com", "cliente");
// Cópia Oculta

/*
* Define o email que receberá resposta desta
mensagem, quando o destinatário responder
*/

$mail -> AddReplyTo("email@remetente.com", $mail -> FromName);
// email de resposta

$mail -> Subject = "Assunto do email";
// titulo (assunto) da mensagem

//Setamos qual é o tamanho do texto por linha pra
// quebrar a linha de forma automática com o WordWrap
$mail -> WordWrap = 50;

// Toda a estrutura HTML e TXT do corpo da mensagem
$mail -> Body = $MensagemHTML;
// Mensagem HTML

$mail -> AltBody = $MensagemTXT;
// Mensagem de Texto

if ($mail -> Send())// Verificamos de o envio foi
// corretamente realizado

echo "";
/*Não iremos realizar nenhuma ação caso seja enviado o
* email
* Caso seja positiva (true) não realizamos nenhuma ação
* aqui
*/

else

echo "<br><br><b>Erro ao enviar e-mail, tente novamente mais tarde.</b>";
// caso ocorra um erro no envio apresentamos a mensagem
// ao usário na tela
?>

17 de Março de 2014 - 21:55

Sua foto do perfil

Mauricio Programador

Olá Charles,

muito bem lembrado meu amigo, obrigado pelo compartilhamento conosco.

Grande abraço.

18 de Março de 2014 - 10:17

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER