[SSMTP] Envoyer des emails depuis Linux

Tags: SSMTP Email Linux


Edit

Je vous invite à lire le commentaire de AnatomicJC. SSMTP (la solution que je vais présenter) comporte des soucis de sécurité depuis bien longtemps déjà ! A utiliser à vos risques et périls mais surtout en connaissance de cause !


Bonjour à tous,

Aujourd’hui, nous allons nous attaquer à un problème simple, à savoir comment envoyer simplement des mails depuis une console Linux !
Avant toute chose, la solution que je vais proposer nécessite un compte mail avec des accès SMTP. Nous n’allons pas installer de vrai serveur mail.

Les serveurs SMTP

Qu’est-ce que c’est ?

Tout d’abord, SMTP signifie Simple Mail Transfer Protocol. Littéralement, c’est donc un protocole (langage) de transfert de mails.

Envoi de mail

Quand vous désirez envoyer un mail, vous allez d’abord remplir différents champs (destinataire, sujet, contenu du mail, pièces jointes …).
Ensuite, peu importe le client mail que vous utilisez (Thunderbird, Outlook, webmail ou autre), celui-ci va se connecter à un serveur SMTP et c’est lui qui va envoyer le mail. Si vous utilisez Gmail, ça sera le (un des) serveur SMTP de Google par exemple.
Le mail va alors transiter de serveurs SMTP en serveurs SMTP avant d’arriver à destination. Pour faire le parallèle avec une lettre postale, vous allez mettre votre lettre dans une boîte aux lettres de La Poste. Elle va ensuite subir plusieurs étapes (bureaux de postes, centre de tris, camions, trains ou avions …) avant d’arriver au bureau de poste final puis chez le destinataire final de la lettre.

Retour de mail

Au dos d’une lettre, vous pouvez écrire votre adresse pour qu’elle vous soit retournée en cas de problème. Il en est de même pour les mails sauf que c’est automatique. Si vous écrivez à une adresse mail qui n’existe pas ou n’est pas disponible, vous allez recevoir un mail du style (avec en pièce jointe le mail envoyé):

Undelivered Mail Returned to Sender

This is the mail system at host xxx.xxx.xx.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<contact@example.com>: host xxx.xxx.xx[yy.yy.yy.yy] said: yy.yy.yy.yy
    <contact@example.com>: Recipient address rejected: User unknown (in reply to
    RCPT TO command)

Ne pas confondre avec les serveurs POP et IMAP

Le protocole SMTP sert pour l’envoi des mails.
Le protocole POP sert pour la récupération des mails depuis le serveur mail, une fois le mail téléchargé, il est disponible sur votre client mais est supprimé du serveur.
A l’inverse, le protocole IMAP permet de gérer les mails sur le serveur, il peut les télécharger mais tout en les laissant sur le serveur. Votre client mail est donc synchronisé avec le serveur mail, si vous changez un mail de dossier, ça le fera également sur le serveur. C’est pour cette raison que si un mail est traité depuis votre PC, il l’est également sur votre mobile.

En savoir plus ?

Je vous ai fait une rapide métaphore entre le mail et la lettre postale, mais si vous voulez plus de détails sur le fonctionnement (notamment au niveau technique), je vous recommande cet excellent article de notre ami Lord.

Pourquoi ne pas installer le sien ?

Il est tout à fait possible d’installer un serveur mail chez soi (par exemple, voici un tutoriel pour installer Postfix sur Debian). Cependant, cela n’est pas vraiment recommandé notamment à cause du SPAM.
Gérer le SPAM reçu n’est pas une chose facile mais on peut s’en sortir. En revanche, si vous avez un VPS par exemple, il y a de fortes chances que votre IP soit déjà blacklistée pour SPAM à cause d’un précédent utilisateur mal-intentionné. Ceci aura pour conséquence que vos mails envoyés finiront directement dans les dossiers SPAM de vos destinataires.

Le SPAM est donc selon moi le principal frein, mais il y a également le fait que ce soit assez complexe à gérer. Grâce à la Loi de Murphy, soyez certains que votre serveur mail tombera en rade pile au moment où vous négociez un appartement ou en pleine recherche de nouveau job ^^

SSMTP

SSMTP est un service permettant d’envoyer des emails facilement. Il ne fait que rediriger le mail vers un serveur SMTP externe.

Ses avantages sont:

  • Une configuration simple et rapide.
  • D’être léger et efficace.
  • De s’interfacer parfaitement avec l’environnement Linux notamment avec la commande /usr/sbin/sendmail.

Je ne lui ai pas trouvé de réel inconvénient (edit: voir l’edit ci-dessus) mis à part le fait de devoir mettre le mot de passe du compte mail en dur dans la configuration. Il ne faut donc pas qu’il soit lisible par tout le monde, mais les droits Linux sont très faciles à utiliser pour cela (chmod 600 config_file).

Installation du paquet SSMTP

Je vais partir du principe que l’on est sur du Debian ou dérivés, mais les paquets doivent surement exister pour les autres distributions.

L’installation se fait donc simplement à l’aide d’un sudo apt-get install ssmtp.
Il faut cependant vérifier que la configuration soit correcte:

  • whereis sendmail doit retourner quelque chose du genre /usr/sbin/sendmail.
  • ls -la <le retour de la commande précédente> doit retourner quelque-chose pointant sur ssmtp.

Configuration

Pour la configuration de SSMTP, vous allez avoir besoin de l’adresse et du port de votre serveur SSMTP. Je vous propose de rechercher ça depuis votre moteur de recherche préféré.

Par exemple mon compte mail est hébergé par OVH, je trouve donc rapidement que:

  • L’adresse du serveur SMTP est ssl0.ovh.net.
  • Le port est 587.
  • Le serveur utilise une connexion TLS.

On a désormais 2 fichiers à éditer pour configurer SSMTP.

ssmtp.conf

Voici le fichier de configuration par défaut qui va être généré dans /etc/ssmtp/ssmtp.conf:

#
# 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=pofIM

# 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

La première chose à faire est de modifier les droits sur celui-ci pour que les utilisateurs ne puissent pas le lire (il contient votre mot de passe notamment).
Faites donc en root un chmod 600 /etc/ssmtp/ssmtp.conf.

Voici une brève description des différents champs (dont certains qui n’y figurent pas mais étant tout de même indispensables):

  • root: Vous pouvez y mettre votre nom d’utilisateur (votre email), c’est lui qui sera affiché pour les utilisateurs dont l’identifiant est inférieur à 1000.
  • AuthUser: Mettez le nom d’utilisateur que vous utilisez pour vous connecter au serveur SMTP.
  • AuthPass: Mettez le mot de passe que vous utilisez pour vous connecter au serveur SMTP.
  • mailhub: Mettez ici votre serveur SMTP (pour moi avec OVH: ssl0.ovh.net:587).
  • hostname: On peut indiquer le nom de l’utilisateur avec lequel on va envoyer l’email. Cependant, le champ ne fonctionne pas chez moi mais cela n’a pas d’incidence et l’email part quand même.
  • FromLineOverride: Avec la valeur YES, le programme envoyant un email aura le droit de modifier l’expéditeur dans l’entête du message.

revaliases

Le deuxième (et dernier) fichier de configuration est /etc/ssmtp/revaliases.

# sSMTP aliases
# 
# Format:       local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.

Les commentaires sont assez explicites, dans mon cas, je rajoute par exemple:
root:monmail@mondomaine.fr:ssl0.ovh.net:587.

Tester la configuration

Pour tester, rien de plus simple, il suffit d’envoyer un mail depuis le terminal.
Commencez par installer le paquet mailutils (sudo apt-get install mailutils).

La commande pour envoyer un mail est la suivante:
echo "contenu du mail" | mail -s "sujet du mail" destinataire@example.com

Les logs

Si vous ne recevez pas le mail, faîtes un tour dans les logs générés (/var/log/mail.log ou /var/log/mail.err) ou encore dans le syslog.
Sinon, les manuels man ssmtp et man ssmtp.conf peuvent vous aider, par exemple pour les options UseTLS et UseSTARTTLS par exemple.

Autrement, n’hésitez pas à demander de l’aide en commentaire :)

Conclusion

Voilà, maintenant vous pouvez envoyer des mails depuis votre terminal !
Mais on ne va pas se mentir, c’est plus dans le but de mails automatiques dans des scripts ou applications.

N’hésitez pas à me dire en commentaires si vous avez d’autres solutions que SSMTP ou bien si vous voulez faire un retour d’expérience si vous hébergez votre propre serveur mail.

Post Scriptum

Je réalise que c’est mon premier article sans la moindre image ! Ce n’est pas dans mon habitude, mais pour le coup, il n’y avait pas réellement d’intérêt à en mettre ^^ J’espère que c’était tout de même assez digeste !

Commentaires