Um dos piores pesadelos de um administrador de sistemas diz respeito ao envio de e-mails, principalmente se você estiver gerenciando uma instância em algum serviço de cloud.
O motivo é que pela facilidade que há de subirmos uma instância em algum cloud (AWS, Azure, Google Cloud etc), também ficou fácil para um spammer subir uma instância e sair disparando e-mails como se não houvesse o amanhã.
Por conta disso a maioria dos provedores de e-mails (Yahoo, Hotmail, Gmail etc) tratam as principais redes cloud com alerta vermelho. Você dificilmente conseguirá montar um servidor de e-mail redondinho que não caia em algum filtro de spam.
Tua configuração pode estar um brinco, com registro SPF, DNS reverso etc, mas basta você estar na rede AWS por exemplo para que os servidores da Microsoft te coloquem em blacklist (pelo menos enfrento esse problema).
Se você não quer ter muita dor de cabeça com servidor de e-mail, uma alternativa a se levar seriamente em consideração é a de terceirizar a entrega de e-mail. Existem dezenas de provedores de envio de mensagens, sendo a
SendGrid um dos mais famosos e confiáveis.
Este artigo é extremamente direcionado e tem por objetivo mostrar como fazer para integrar o servidor de email
Exim4 com a SendGrid.
Estou partindo do princípio de que você já tem um servidor Exim4 em funcionamento e quer apenas direcionar o tráfego de saída de mensagens para o SMTP da SendGrid.
Configuração do Exim4
Entre no diretório de configuração do Exim4:
# cd /etc/exim4
Edite o arquivo de configuração principal:
# vim exim4.conf.template
Procure pela linha "begin authenticators" e logo abaixo dela adicione:
sendgrid_login:
driver = plaintext
public_name = SENDLOGIN
client_send = : seuUsuario : suaSenha
Troque "seuUsuario" e "suaSenha" por suas credenciais, sem aspas.
Agora procure pela linha "begin routers" e logo abaixo dela adicione:
send_via_sendgrid:
driver = manualroute
domains = ! +local_domains
transport = sendgrid_smtp
route_list = "* smtp.sendgrid.net::587 byname"
host_find_failed = defer
no_more
E por fim procure pela linha "begin transports" e logo abaixo dela adicione:
sendgrid_smtp:
driver = smtp
hosts = smtp.sendgrid.net
hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address
Feito isso, reinicie o servidor Exim4:
# service exim4 restart
Faça um teste de roteamento de e-mail. Exemplo, testar se o router irá processar uma entrega para o Gmail:
# exim4 -v -bv bolsonaro@gmail.com
bolsonaro@gmail.com
router = send_via_sendgrid, transport = sendgrid_smtp
host smtp.sendgrid.net [169.45.113.201] port=587
host smtp.sendgrid.net [167.89.118.51] port=587
host smtp.sendgrid.net [167.89.118.58] port=587
host smtp.sendgrid.net [169.45.89.186] port=587
Sucesso! O Exim4 já está configurado para entregar suas mensagens usando o SendGrid.
Para efeito de curiosidade, se você usar o comando acima com um usuário local, o Exim4 fará o processamento local, ignorando o router "send_via_sendgrid", uma vez que "localhost" está em local_domains:
# # exim4 -v -bv fabio@localhost
R: system_aliases for fabio@localhost
R: lowuid_aliases for fabio@localhost (UID 1001)
R: local_user for fabio@localhost
fabio@localhost
router = local_user, transport = maildir_home
Bônus
Se você estiver interessado em usar um provedor de e-mail e não gostou do SendGrid, seguem algumas alternativas:
Referência:
Exim 4 configuration for SendGrid | SendGrid Documentation