Linux: Enviando e-mails com sSMTP pelo GMail
Autor: Leandro Ferreira | Publicado: 2015-12-06T02:46:00-03:00

Depois de dois dias batendo cabeça para habilitar o envio de e-mail em um dos meus servidores Ubuntu 14.04.3 com o sSMTP, utilizando uma conta do Gmail, decidi fazer esse post para quem sabe ajudar futuros aventureiros.

Vamos lá! 

1 - Instalando o sSMTP:

<!-- HTML generated using hilite.me -->

sudo apt-get install ssmtp



2 - Configurando o STMP do Gmail e suas credenciais:

<!-- HTML generated using hilite.me -->

sudo nano /etc/ssmtp/ssmtp.conf



O arquivo ssmtp.conf ficou assim:

<!-- HTML generated using hilite.me -->

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids &lt; 1000
# Make this empty to disable rewriting.
# root=postmaster

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
# mailhub=mail

# Where will the mail seem to come from?
# rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES

hostname=localhost
Root=usuario@gmail.com
Mailhub=smtp.gmail.com:465
RewriteDomain=gmail.com
AuthUser=usuario #(sem o @gmail.com)
AuthPass=sua_senha
FromLineOverride=Yes
UseTLS=Yes



OBS. Não esqueça de colocar os seus dados nos parâmetros "Root", "AuthUser" e "AuthPass". O resto fica como no exemplo.

3 - Instalando o cliente de envio de e-mail para que você possa enviar mensagens pelo PHP, via scripts bash, diretamente no console, etc.

<!-- HTML generated using hilite.me -->

sudo apt-get install heirloom-mailx



4 - Testando o envio! Para isso, execute no console:

<!-- HTML generated using hilite.me -->

echo "Teste de envio de e-mail pelo gmail com sSMTP" | mail -s "Teste de e-mail" destinatario@seudominio.com



OBS. Não esqueça de trocar "destinatario@seudominio.com" pelo seu e-mail.



E se o e-mail de teste não chegar ?
Bom, é aqui que perdi 2 dias da minha vida pra fazer isso funcionar.


É problema de REDE ou de CONFIGURAÇÃO ?
Para isso, use o telnet :

<!-- HTML generated using hilite.me -->

# telnet smtp.gmail.com 465
Trying 173.194.212.108...
Trying 173.194.212.109...
Trying 2607:f8b0:400c:c11::6d...
telnet: Unable to connect to remote host: Network is unreachable



Se a resposta for parecida com o quadro acima, seu problema é de rede.

- Verifique se o seu provedor tem algum tipo de bloqueio anti spam para envio de e-mails por SMTP (No meu caso utilizo DigitalOcean e eles bloqueiam por padrão, tive que abrir um ticket no suporte para que pudessem habilitar. Perdi horas por conta disso achando que eu tinha configurado algo errado).

- Verifique se existe alguma regra de firewall impedindo que o seu servidor se conecte no SMTP do Gmail na porta configurada (no caso deste post, a porta utilizada foi a 465). Para isso, dê uma olhada nas regras do IPTABLES ou UFW. Se usa provedores que tem uma camada de segurança extra como a Amazon Web Services por exemplo, veja no painel de controle na parte de segurança se tem algo impedindo o acesso.

Resolvidas essas questões, o que se espera do telnet é algo assim:

<!-- HTML generated using hilite.me -->

# telnet smtp.gmail.com 465
Trying 173.194.212.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.



Agora repita o teste de envio relatado no passo 4 acima. Se ainda assim não receber o e-mail, seu problema é de configuração ou de prevenção de invasão do Google.

Primeira coisa, veja no log do seu servidor os detalhes das tentativas de envio:

<!-- HTML generated using hilite.me -->

# tail -n 100 /var/log/mail.log 



Se o resultado for algo como abaixo, seu problema é usuário ou senha errados (confira bem), ou algum dispositivo de prevenção de invasão do Google:

<!-- HTML generated using hilite.me -->

Nov  7 01:33:34 lion sSMTP[28075]: Creating SSL connection to host
Nov  7 01:33:35 lion sSMTP[28075]: SSL connection using RSA_ARCFOUR_SHA1
Nov  7 01:33:35 lion sSMTP[28075]: Authorization failed (534 5.7.14  https://support.google.com/mail/answer/78754 y194sm2932906vkd.13 - gsmtp)



Se tem certeza que seu usário e senha estão corretos, verique se o Gmail não te mandou algum e-mail lhe informando uma possível invasão de conta, como o seguinte:





Esse problema me tomou mais algum tempo, até que eu pudesse perceber o e-mail na caixa de entrada. Clique em "Revisar seus dispositivos agora" e confirme sua identidade.

Ainda sobre o Google, mesmo que não receba o e-mail acima, certifique-se de:

Habilitar o acesso por aplicações "menos seguras" (infelizmente é esse o nome mesmo) - https://www.google.com/settings/security/lesssecureapps
Conferir o check list do próprio Google para erro de senha - https://support.google.com/accounts/answer/6009563&nbsp;

Foi no primeiro item do check list que perdi horas achando que meu problema era alguma configuração. Veja do que se trata :


Para proteger sua conta, o Google pode dificultar o login à sua conta se
 suspeitar que ele não esteja sendo feito por você. Por exemplo, o 
Google pode solicitar informações adicionais, além do seu nome de 
usuário e sua senha, se você estiver viajando ou se tentar fazer login 
na sua conta em um novo dispositivo.
      
Sendo assim, acesse o link https://g.co/allowaccess e caso esteja bloqueado, libere o acesso a novos dispositivos para sua conta. Esse era o meu problema, e depois de liberado, fiz o teste de envio novamente e veio a mensagem esperada no log:

<!-- HTML generated using hilite.me -->

Nov  7 01:50:30 server sSMTP[28123]: Creating SSL connection to host
Nov  7 01:50:30 server sSMTP[28123]: SSL connection using RSA_ARCFOUR_SHA1
Nov  7 01:50:33 server sSMTP[28123]: Sent mail for destinatario@gmail.com (221 2.0.0 closing connection p138sm2945424vkd.25 - gsmtp) uid=0 username=root outbytes=603



E é claro, recebi o e-mail de teste na minha caixa de entrada.

Uma última observação: Nas minhas pesquisas, identifiquei que algumas pessoas tiveram problemas com os certificados para acesso via SSL.
Para isso, algumas propriedades adicionais foram utilizadas no arquivo ssmt.conf, sendo:

<!-- HTML generated using hilite.me -->

UseStarTTLS=Yes
TLS_CA_File=/etc/ssl/certs/ca-certificates.crt



Bom, espero ter ajudado. Se tiver algo a acrescenter, comente o post.