Envio de e-mail com ssmtp

Envio de e-mail pelo servidor usando ssmtp

#unix
Nota: Todos os comandos eu executei como root, caso não seja root use o sudo antes dos comandos.

Enviando e-mail de máquina unix usando o ssmtp.

No ubuntu instale com o apt-get:

# apt-get install ssmtp

Depois basta configurar para usar o Amazon SES no arquivo /etc/ssmtp/ssmtp.conf:

root=username@mydomain.com
mailhub=email-smtp.us-east-1.amazonaws.com:465
hostname=myserver.mydomain.com

FromLineOverride=YES

AuthUser=AAAAABBBBBCCCCCDDDDD
AuthPass=AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIII
UseTLS=YES
AuthMethod=LOGIN

Se for usando o Gmail1:

root=username@gmail.com
mailhub=smtp.gmail.com:587
hostname=myserver.mydomain.com

FromLineOverride=YES

UseSTARTTLS=YES
AuthUser=username@gmail.com
AuthPass=MyPassword

Depois de fazer a configuração tem ainda que deixar as permissões corretas:

# chmod 640 /etc/ssmtp/ssmtp.conf
# chown root:mail /etc/ssmtp/ssmtp.conf

Se quiser que algum usuário envie e-mail, basta adicioná-lo ao grupo mail, editando diretamente o /etc/group ou:

# gpasswd -a username mail

Enviando e-mail

Para testar (caso seu usuário não seja do grupo mail use o sudo antes do ssmtp):

# echo "Testing" | /usr/sbin/ssmtp username@gmail.com

Ou se quiser use um arquivo, por exemplo:

From: username@mydomain.com
Subject: This is Sparta!

Hi.

E chamando via linha de comando:

# ssmtp username@mydomain.com < /tmp/mail.txt

Rails

Para configurar no Rails basta usar algum arquivo de configuração no initializers semelhante a:

Rails.application.configure do
  config.action_mailer.delivery_method = :sendmail
  config.action_mailer.sendmail_settings = { :arguments => '-i' }
  config.action_mailer.default_url_options  = { :host => "mydomain.com" }
end

Ou então colocar em config/environments/production.rb.

Exemplo de scripting

O script abaixo eu coloquei num servidor para me enviar um e-mail com as atualizações que são necessárias, no meu caso coloquei uma vez por dia no crontab:

#!/bin/bash

apt-get update >/dev/null 2>/dev/null
count=$(/usr/lib/update-notifier/apt-check --human-readable | grep -v ^0 | wc -l)

if [ $count -ne 0 ]
then
  file=/tmp/updates-notify-$$

  echo -e "To: username@mydomain.com
From: $(hostname)@mydomain.com
Subject: $(hostname -f) has updates

The server $(hostname -f) has updates:

$(/usr/lib/update-notifier/apt-check --human-readable)

$(apt-get -s -o Debug::NoLocking=true upgrade | grep 'Inst' | cut -d' ' -f2)
" >> $file

  ssmtp username@mydomain.com < $file
  rm $file
fi

Fontes

“SSMTP - ArchWiki”. ArchWiki. Accessed May 19, 2014. https://wiki.archlinux.org/index.php/SSMTP.

“How to Use GMail as a Free SMTP Server and Overcome Captcha”. Accessed May 19, 2014. http://stackoverflow.com/questions/1607828/how-to-use-gmail-as-a-free-smtp-server-and-overcome-captcha.

“Rails & Sendmail Recipients with -T Option Not Supported.” Accessed May 31, 2014. http://stackoverflow.com/questions/6456205/rails-sendmail-recipients-with-t-option-not-supported.


1 Cuidado que o gmail tem um problema de autenticação, caso toda sua configuração esteja certa e mesmo assim receba erro de autenticação, visite: http://www.google.com/accounts/DisplayUnlockCaptcha ou https://www.google.com/a/yourdomain.com/UnlockCaptcha para autorizar o envio de e-mail pelo seu servidor.