Hospedagem Profissional

Hospedagem Profissional
Clique aqui e ganhe US$ 10,00 para testar durante 1 mês a melhor hospedagem: Digital Ocean!

domingo, 6 de dezembro de 2015

Linux: Enviando e-mails com sSMTP pelo GMail

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:


sudo apt-get install ssmtp

2 - Configurando o STMP do Gmail e suas credenciais:


sudo nano /etc/ssmtp/ssmtp.conf

O arquivo ssmtp.conf ficou assim:


#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 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.


sudo apt-get install heirloom-mailx

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


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 :


# 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:


# 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:


# 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:


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:
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:


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:


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

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