Enviar e-mails localhost com PHP e PHPMailer

Enviar e-mails localhost com PHP e PHPMailerNo post de hoje vamos tratar de um tema muito solicitado no blog, como enviar e-mails localhost com PHP e para efetuarmos esse tarefa vamos usar a biblioteca PHPMailer.

A maioria do leitores que possui a dúvida sobre como enviar e-mails localhost, passa pela questão da existência da função nativa mail() do PHP onde passamos apenas alguns parâmetros para que nossa mensagem seja enviada.

Com isso temos a falsa impressão que basta apenas termos o PHP e o Apache instalados para podermos enviar e-mails localmente.

Por que a função mail() não funciona localmente?

A reposta é simples, a função mail() carrega as configurações do servidor SMTP a partir do arquivo php.ini, onde não é suportado passar informações como usuário e senha, temos um problema porque a maioria dos servidores SMTP (gmail, hotmail, yahoo e etc) necessitam de autenticação.

  • Quando estamos trabalhando em servidores de hospedagem, os mesmos já possuem um servidor SMTP instalado e com os dados configurados no php.ini, por isso na maioria das hospedagens a função mail() funciona tranquilamente. 
  • Quando estamos trabalhando localmente não temos um servidor SMTP instalado em nossas máquinas, podemos até tentar configurar o php.ini para usar um servidor externo como gmail por exemplo, seria necessário passar usuário e senha, mas o php.ini não tem essa opção de configuração e nesse caso não iria funcionar.

 

Trabalhando com PHPMailer localmente

Agora que já conhecemos o problema da função mail() vamos a solução do problema que é usar a biblioteca PHPMailer que poder ser baixada manualmente ou utilizando o gerenciador de dependências composer.

Essa biblioteca funciona como um “wrapper” empacotando toda a complexidade para envio de e-mails e disponibilizando diversas funcionalidades básicas como autenticação, envio com cópias, anexo de arquivos e etc.

Temos alguns pré-requisitos que são necessários no servidor Apache e no PHP:

  1. Habilitar o módulo ssl_module no Apache
  2. Habilitar a extensão open_openssl no php.ini
  3. Habilitar a extensão php_sockets no php.ini
Post relacionado:  5 itens iniciais para configurar no CodeIgniter 3

Observação: A maneira como são habilitados os módulos e extensões, além do caminho dos arquivos de configuração são diferentes para Linux e Windows, sugiro ao leitor pesquisar sobre o assunto.

 

Desbloqueando GMAIL para envio

Vou usar o servidor SMTP do GMAIL “smtp.gmail.com” (é necessário possuir conta no gmail) no script para testar o envio, possivelmente na primeira vez que o leitor tentar enviar um e-mail usando o GMAIL será exibido um erro, onde basicamente o Google bloqueia a tentativa de login por dispositivos menos seguros.

Para resolver esse problema efetue o login na sua conta e acesse a página Aplicativos menos seguros, marque a opção “Ativar”:

Ativar Login Aplicativos menos seguros

 

Testando envio de e-mail com PHPMailer

Agora podemos enviar e-mails usando GMAIL sem o problema do bloqueio, abaixo segue um script básico usando PHPMailer para enviar e-mail com destinatário “wllfl@ig.com.br”.

Para esse exemplo baixei direto do repositório oficial do PHPMailer no GitHub os arquivos da biblioteca, coloquei esses arquivos na pasta “PHPMailer” que está dentro do meu projeto, no script é só apontar o require para o caminho “PHPMailer/PHPMailerAutoload.php” com isso já podemos instanciar o objeto PHPMailer:

 

Post relacionado:  Aprenda como fazer Upload de imagens usando AJAX e PHP sem Refresh na Página

Resultado 

Observem que recebi o e-mail com todas as informações que passei no script acima, nome e e-mail do remetente, assunto e formatação da mensagem onde utilizei tag <h1>, esse e-mail foi enviado da minha máquina.

Recebendo e-mail enviado via PHPMailer

A biblioteca PHPMailer possui vários tipos de configurações, todas elas podem ser encontradas na documentação oficial.

Todos os servidores SMTP que testei e funcionaram, seguem abaixo as configurações:

  • GMAIL
    • Servidor SMTP: smtp.gmail.com
    • Porta: 465
    • SMTPSecure: ssl
    • Desbloqueio no Servidor: É necessário desbloquear no GMAIL
  • YAHOO
    • Servidor SMTP: smtp.mail.yahoo.com
    • Porta: 465
    • SMTSecure: ssl
    • Desbloqueio no Servidor: Não é necessário
  • HOTMAIL
    • Servidor SMTP: smtp.live.com
    • Porta: 587
    • SMTPSecure: tls
    • Desbloqueio no Servidor: Não é necessário
  • IG
    • Servidor: smtp.ig.com.br
    • Porta: 465
    • SMTSecure: ssl
    • Desbloqueio no Servidor: Não é necessário

Observações: Para usar esses servidores SMTP é necessário possuir uma conta de e-mail válida em cada um deles. Todos os servidores enviaram normalmente os e-mails mas o HOTMAIL recebe a maioria das mensagens na lixeira, então não existe garantia que a mensagem chegue ao destinatário sempre na caixa de entrada.

Demo 

Para o leitor que se interessar, construí um formulário básico de teste sem validações, mas é possível enviar e-mails com todos os servidores que citei acima, nesse link é possível efetuar o download  ExemploPHPMailer.zip (2362 downloads) .

Fomulário para teste do PHPMailer

 

Bom pessoal com isso chego ao fim de mais um post, demonstrei bem resumidamente como podemos usar a biblioteca PHPMailer para enviar e-mails localmente, é claro que podemos trabalhar com ela em nossos projetos hospedados em servidores WEB, basta configurar todos os parâmetros que foram descritos no script acima adequadamente.

Até a próxima …

Show Buttons
Hide Buttons