Ssmtp petit serveur de mail

Vous avez un petit serveur dédié ou une machine à la maison avec laquelle vous souhaitez simplement envoyer quelques mails en ligne de commande ou via une page web et la fonction mail() de php?
Ne cherchez plus Ssmtp est la solution la plus simple.

Installation et configuration

On commence bien sur par installer Ssmtp

# aptitude install ssmtp

Sur certaines distribution un serveur de mail est déjà installé, c'est le cas pour Exim4 sur Debian.
Si l'installation échoue due à un conflit avec un serveur déjà présent il sera peut-être nécessaire de le désinstaller.

Une fois Ssmtp installé nous allons procéder à quelques vérifications comme par exemple savoir si c'est bien Ssmtp qui se chargera d'envoyer des emails.
Pour cela nous avons besoin de savoir ou se trouve le programme sendmail sur notre distribution. La commande suivante va nous y aider.

# whereis sendmail
sendmail: /usr/sbin/sendmail /usr/lib/sendmail /usr/lib64/sendmail /usr/share/man/man8/sendmail.8.gz

La réponse est en début de ligne /usr/sbin/sendmail

On peut désormais savoir si c'est bien ssmtp qui est le programme associé à sendmail pour l'envoi de mails.

# ls -la /usr/sbin/sendmail
lrwxrwxrwx 1 root root 5  1 août  11:59 /usr/sbin/sendmail -> ssmtp

Parfait, on peut donc passer à la configuration.

Ssmtp n'a que deux fichiers de configuration situés dans /etc/ssmtp.

Commençons par ssmtp.conf

# nano /etc/ssmtp/ssmtp.conf

Voici à quoi ressemble mon fichier de configuration

# 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=smtp.wanadoo.fr:587

#UseSTARTTLS=YES

# 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

AuthUser=monlogin
AuthPass=monpassword

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=nomdelamachine

Quelques explications:

Ssmtp n'est pas un serveur de mail, il se contente juste d'en utiliser un existant pour envoyer du courrier.
Dans mon cas j'utilise ma bonne vieille adresse de messagerie Wanadoo mais si vous êtes client chez un autre fournisseur vous devrez bien entendu utiliser ses propres paramètres smtp (smtp.sfr.fr, ...).

Si vous êtes client gmail (entre autre) cette ligne devra être dé-commentée.

Comme expliqué dans le fichier de configuration cette ligne paramétrée à YES vous permettra d'envoyer des mails avec l'expéditeur de votre choix. Par exemple si vous envoyez un courrier avec la fonction mail() de php, le destinataire recevra un e-mail en provenance de www-data, pas terrible.
Il suffira alors de renseigner le 4 ème champ de la fonction mail() ainsi: mail($destinataire, $sujet, $message, 'From: no-reply@example.com'); et le destinataire recevra un e-mail avec comme expéditeur "no-reply@example.com".

Ce sont vos login et mot de passe liés à votre adresse e-mail (dans mon cas ceux de Wanadoo).

Ce paramètre est normalement renseigné automatiquement lors de l'installation de Ssmtp, c'est juste le nom de la machine hôte.

Passons au second fichier de configuration

# nano /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.

root:monlogin@wanadoo.fr:smtp.wanadoo.fr:587
www-data:monlogin@wanadoo.fr:smtp.wanadoo.fr:587

Dans ce fichier on ajoute les alias pour les utilisateurs ayant droit d'envoyer des mails

Quelques tests

Envoyons un mail en ligne de commande et vérifions les logs

# echo Contenu du message | mail -s "sujet du mail" destinataire@free.fr

# tail /var/log/mail.log
...
Aug  4 10:06:07 nomdelamachine sSMTP[3567]: Sent mail for monlogin@wanadoo.fr (221 2.0.0 mwinf5d67 ME closing connection) uid=0 username=root outbytes=511

Pas d'erreur, je consulte ma boite mail, le message est bien arrivé.

sSMTP: 501 5.1.0 Emetteur invalide. Invalid Sender.

Alors que je réalisais des modifications sur un de mes projets, j'ai changé l'adresse de courriel qui me servait de test (no-reply@exemple.com) par une adresse correspondante au domaine que j'envisageais d'obtenir (no-reply@chabada123.com).
Et patatraque les mails n'arrivent plus, un petit coup de tail /var/log/mail.log m'indique une erreur sSMTP[8758]: 501 5.1.0 Emetteur invalide. Invalid Sender. OFR304_405 [405]. Bien que le message soit plutôt explicite: Emetteur invalide, il m'a fallu quelques essais pour que je me rende compte que seuls les domaines enregistrés pouvaient donner un résultat concluant à mes requêtes. Je peux donc envoyer des mails avec une entête no-reply@google.com mais pas no-reply@chabada123.com.

13-Jul-2019
^