Sur certaines machines il est utile de pouvoir envoyer des emails de rapports, via script, cron, à la main etc. Je trouve qu’utiliser SSMTP est simple et rapide quand on souhaite utiliser pour ça un prestataire externe : envoyer un email depuis le serveur A via une boîte mail Openmailbox.org par exemple.
J’ai en effet un compte [email protected] qui ne me sert qu’à ça. Bien pratique et gratuit (mais leur faire un don est toujours utile et sympa).
Le but sera ici d’installer SSMTP, de le configurer afin d’utiliser un compte @opmb.org, de passer outre la restriction d’envoi de mail depuis « root/user » et de tester tout ça. Je suis sur Debian 8, fresh install.
Installation
Il faut On peut commencer par retirer le serveur de mail de Debian : exim
sudo dpkg -r exim4 sudo dpkg --purge exim4
On installe ensuite SSMTP
sudo apt-get install ssmtp
Linux utilise sendmail pour envoyer un email. On va véfifier que c’est bien SSMTP qui fait appel à lui
ls -la /usr/sbin/sendmail Et si vous voyez quelque chose dans ce genre c'est que c'est bon lrwxrwxrwx 1 root root 5 Jul 14 2014 /usr/sbin/sendmail -> ssmtp
Configuration
Voici un exemple de configuration avec Openmailbox.org. Libre à vous d’utiliser un autre prestataire d’emails, pensez bien à modifier dans ce cas le serveur smtp et le port SSL/TLS de ce dernier.
Le plus simple pour le configurer est de partir de 0. Pour ça on copie sa configuration initiale et on supprime l’originale
sudo cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.BACK sudo rm /etc/ssmtp/ssmtp.conf
Puis on recrée le fichier de conf
sudo nano /etc/ssmtp/ssmtp.conf
Et on y ajoute « notre » configuration
# Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. [email protected] # 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=smtp.openmailbox.org:587 # Where will the mail seem to come from? rewriteDomain=openmailbox.org # The full hostname hostname=localhost # Use SSL/TLS before starting negotiation UseTLS=Yes UseSTARTTLS=Yes # Username/Password [email protected] AuthPass=mot_de_passe_compliqué # Email 'From header's can override the default domain? FromLineOverride=yes
Passer outre l’erreur Sender address rejected: not owned by user [email protected]
Par défaut l’email est envoyé avec une adresse reprenant le nom d’utilisateur @localhost. Si vous ou votre script/logiciel veut envoyer un email l’utilisateur sera lors « root » ou encore « Aerya » ou « Logwatch » etc. Car outre les classiques comptes root/user il arrive, et c’est mieux, qu’on fasse tourner certains services sur un user dédié.
Et le domaine sera soit celui rattaché à votre serveur, soit son IP soit… le domaine du prestataire d’email.
C’est en effet comme ça que j’ai paramétré SSMTP plus haut :
# Where will the mail seem to come from? rewriteDomain=openmailbox.org
Si vous ne voulez pas vous pouvez juste commenter la ligne rewriteDomain= (en mettant # devant).
Ce n’est ni une arnaque ni un spoofing c’est juste que c’est plus propre d’envoyer un email depuis un domaine que d’une IP. Car tout le monde n’a pas de domaine ou sous-domaine rattaché à son serveur. Si c’est votre cas, bien entendu ajustez le rewriteDomain en conséquence.
Bref, en l’occurrence Openmailbox.org détecte que l’email est envoyé par mon User sur le serveur et non pas par [email protected] et rejette donc logiquement l’email. Il faut indiquer à sendmail que les 2 utilisateurs sont les mêmes en éditant (ou créant) un aliase pour l’utilisateur local :
sudo nano /etc/ssmtp/revaliases
Et on ajoute autant de ligne que d’utilisateur devant envoyer un email
# sSMTP aliases # # Format: local_account:outgoing_address:mailhub # # Example: root:[email protected]:mailhub.your.domain[:port] # where [:port] is an optional port number that defaults to 25. root:[email protected]:smtp.openmailbox.org:587 user1:[email protected]:smtp.openmailbox.org:587 user2:[email protected]:smtp.openmailbox.org:587
Vérification
On peut tout simplement vérifier que tout est correctement configuré en s’envoyant un email avec cette commande : echo contenu de l'email | mail -s "sujet" destinataire
echo Contenu_Test | mail -s "Ceci est un test" [email protected]
Et voilou. Simple et rapide.