Utilizando a classe phpmailer como alternativa a função mail() do PHP

Publicado por Thiago Luiz da Silva em 26/11/2009

[ Hits: 17.750 ]

 


Utilizando a classe phpmailer como alternativa a função mail() do PHP



A classe phpmailer é uma ótima alternativa pois não necessita de servidores SMTP rodando na máquina, facilitando seu uso em diversos sistemas operacionais. Antes de tudo precisamos baixar a classe phpmailer, disponível em:
Procure pelo arquivo "PHPMailer_v5.1.zip" na categoria PHPMailer v5.1 ou superior.

Depois de descompactar o arquivo em uma pasta de seu interesse dentro do servidor, é só incluir no arquivo desejado com a função:

include("suapasta/phpmailer/class.phpmailer.php");

Vamos agora enviar um email simples em modo texto:

<?PHP
//Primeiro setamos o cabeçalho:
  $header .= " Content-type: text/html; charset=iso-8859-1\r\n";  
//instanciamos o objeto
$mail = new PHPMailer();
// Informamos que vamos enviar através de SMTP
$mail->IsSMTP();
// Colocamos o servidor smtp
$mail->Host = "smtp.seusmtp.com.br";
// Se seu servidor de smtp necessita de autenticação, devemos habilitar este item:
$mail->SMTPAuth = true;
// colocamos agora o usuário e senha do servidor smtp
$mail->Username = "seuemail@seumsmtp.com.br";
$mail->Password = "******";
// Agora vamos informar qual email vai aparecer como remetente
$mail->From = "seuemail@seusmtp.com.br";
$mail->FromName = "Seu Nome";

//Agora vamos adicionar alguns destinatários
$mail->AddAddress("fulano@vivaolinux.com.br","Fulano");
$mail->AddAddress("ciclano@vivaolinux.com.br","Ciclano");
//Podemos setar qual é o tamanho do texto por linha pra quebrar a linha de forma automática
$mail->WordWrap = 50;
//Vamos colocar o assunto do email
$mail->Subject = "Hello sWriter";
//Colocamos o texto do email
$mail->Body = "Este foi meu teste de email";
//e mandamos enviar:
  if(!$mail->Send())
  {
//Exibimos o erro ocorrido
     echo $mail->ErrorInfo;
  }
?>

Email avançado HTML + anexo

Agora vamos enviar um email mais elaborado em HTML e com anexos.

Primeiro vamos inicializar a parte padrão do email da mesma maneira que na anterior:

<?PHP
//Primeiro setamos o cabeçalho:
  $header .= " Content-type: text/html; charset=iso-8859-1\r\n";  
//instanciamos o objeto
$mail = new PHPMailer();
// Informamos que vamos enviar através de SMTP
$mail->IsSMTP();
// Colocamos o servidor smtp
$mail->Host = "smtp.seusmtp.com.br";
// Se seu servidor de smtp necessita de autenticação, devemos habilitar este item:
$mail->SMTPAuth = true;
// colocamos agora o usuário e senha do servidor smtp
$mail->Username = "seuemail@seumsmtp.com.br";
$mail->Password = "******";
// Agora vamos informar qual email vai aparecer como remetente
$mail->From = "seuemail@seusmtp.com.br";
$mail->FromName = "Seu Nome";

//Agora vamos adicionar alguns destinatários
$mail->AddAddress("fulano@vivaolinux.com.br","Fulano");
$mail->AddAddress("ciclano@vivaolinux.com.br","Ciclano");
//Podemos setar qual é o tamanho do texto por linha pra quebrar a linha de forma automática
$mail->WordWrap = 50;
//Vamos colocar o assunto do email
$mail->Subject = "Hello sWriter";
?>

Agora sim vamos as novidades:

<?PHP
//vamos anexar os arquivos:
$mail->AddAttachment("anexo/arquivo.zip");
$mail->AddAttachment("imagem/foto.jpg");

//Setamos a propriedade do HTML para true
$mail->IsHTML(true);

//Colocamos o texto do email
$mail->Body = "<H1><b>Este é um texto em HTML</b></H1>";
//e mandamos enviar:
  if(!$mail->Send())
  {
//Exibimos o erro ocorrido
     echo $mail->ErrorInfo;
  }
?>

É isso aí pessoal, agradeço por estarem lendo este texto e qualquer dúvida é só perguntar.

Espero que este tenha sido útil.

Outras dicas deste autor

Exibindo código ASCII das teclas

Leitura recomendada

Bloqueando redes da China/Coréia

Criando um Squid totalmente empresarial

Bloqueando e liberando domínios com Firewall IPFW

Menu popup dinânico (DHTML) com infinitos níveis usando apenas CSS

Instalando o Android virtualizado no PC

  

Comentários
[1] Comentário enviado por removido em 28/11/2009 - 19:21h

Olá Thiago, muito bom seu artigo.

Só complementando, esses dias tive problemas com o phpmailer e logo descobri que o erro ocorria devido a versão do PHP (4) que o servidor em questão estava utilizando. Para contornar o problema, baixei as duas versões (para PHP4 e PHP5) e então acrescentei as seguintes linhas ao script (no início do script ) pois assim poderia utilizar o script sem erros em qualquer servidor com qualquer versão do PHP:

// Detecta a versão do PHP.
if( substr(phpversion(),0,strpos(phpversion(), '-')) >= '5.0.0' ) {
$PHP_VERSAO = "PHP5";
} else {
$PHP_VERSAO = "PHP4";
}

// Inclui a classe phpmailer de acordo com a versão do PHP.
include ("suapasta/phpmailer/". $PHP_VERSAO ."/class.phpmailer.php");
// Define o Idioma do PHPMailer para Português Brasileiro (em caso de erros, estes serão exibidos corretamente em nosso idioma).
$mail->SetLanguage("br", "suapasta/phpmailer/$PHP_VERSAO/language/");

Abraço...

[2] Comentário enviado por thiago.silva em 28/11/2009 - 20:31h

Obrigado pela colaboração João. Vai ser bem útil para o pessoal.

[3] Comentário enviado por mauricioalemonge em 18/12/2012 - 17:07h

Olá Thiago, muito boa sua dica! Parabéns!

Obrigado, me ajudou e muito a sua dica.

[4] Comentário enviado por henbran em 01/12/2015 - 09:53h

BOM DIA!
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Por gentileza, quais as possibilidades de tentar solução quando ocorre essa mensagem e não envia o email, por favor.

[5] Comentário enviado por thiago.silva em 01/12/2015 - 11:07h

Bom dia henbran!.
Provavelmente seu problema está nas "novas" regras de envio de emails. Com aspas porque acho que foi em 2013 ou 2014, se não me engano.
Verifique na configuração do smtp se a porta selecionada é a 587. Se estiver 25, troque para a 587. A conta do email do remetente também deve ser o mesmo da exibida para o destinatário para resposta, ou seja, $mail->Username deve ser igual a $mail->From;
Confirme nas configurações do seu provedor se os endereços de smtp, conta de usuário e senha conferem.

Espero que tenha ajudado.

Abraços

[6] Comentário enviado por henbran em 01/12/2015 - 12:21h

Prezados ... e Thiago ... obrigado. Porém soube agora com o pessoal de infra que preciso setar o mailler para conexão com PROXY da rede. Apenas precisamos saber como se faz isso. Estou googlando aqui, se alguém souber a solução, por gentileza, compartilhem conosco. Todavia, se eu encontrar, posto aqui.

Até +



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts