Utiliser ssmtp comme remplacement de sendmail
Le 27 janvier, 2009 - 22:34 | Ulhume

Comment un démon, par exemple CRON, exécuté sur une machine qui n'a pas de MTA (Mail Transfert Agent) peut-il envoyer alors ses mails de notification ? la réponse souvent évoquée dans les forums est... en installant Postfix ou Sendmail... Pas lourd du tout comme idée ;-) Heureusement il existe en réalité une alternative un peu moins gourmande nommé ssmtp.

L'héritage UNIX veut que lorsqu'un outil a besoin d'envoyer un courriel, il passe par l'invocation de la commande /usr/sbin/sendmail. Historiquement cette commande était fournie par l'outil sendmail, mais l'est aussi par exemple par postfix.

ssmtp lui aussi va fournir au système une commande sendmail mais en ne faisant que rediriger les courriers vers un serveur SMTP externe. Cet outil est donc très léger et rapide, et ne demande que très peu de paramétrage. Grâce à lui, il nous est maintenant possible, sans installer d'usine à gaz, de permettre à CRON, ou encore à la commande at, de publier leurs résultats.

Encore une fois ssmtp ne fait que fournir une implémentation sendmail de type "client SMTP", il n'y a aucun démon lancé. Il suffit donc juste de l'installer :

# est-ce que l'on a déjà une implémentation de sendmail ?
root#whereis sendmail
sendmail:
 
# à l'évidence non, installation de ssmtp
root#urpmi ssmtp
ftp://ftp.proxad.net/pub/Distributions_Linux/MandrivaLinux/official/2009.0/x86_64/media/contrib/release/ssmtp-2.62-2mdv2009.0.x86_64.rpm
installation de ssmtp-2.62-2mdv2009.0.x86_64.rpm depuis /var/cache/urpmi/rpms
Préparation ... ##########################################################################################
1/1: ssmtp ##########################################################################################
 
# Et cette fois ?
root#whereis sendmail
sendmail: /usr/sbin/sendmail
 
# Et qui est derrière ce "sendmail" ?
root#ls -la /usr/sbin/sendmail
lrwxrwxrwx 1 root root 34 2009-01-27 21:22 /usr/sbin/sendmail -> /etc/alternatives/sendmail-command*
root#ls -la /etc/alternatives/sendmail-command
lrwxrwxrwx 1 root root 15 2009-01-27 21:22 /etc/alternatives/sendmail-command -> /usr/sbin/ssmtp*
installation de ssmtp

Ici la commande /usr/sbin/sendmail est donc un lien symbolique vers le client SMTP. Côté paramétrage, il nous faut maintenant modifier le fichier /etc/ssmtp/ssmtp.conf pour désigner le serveur SMTP à contacter :

# Touts les uid < 1000 utiliserons cette address pour leur From
# ainsi un démon d'uid 75 qui cherche à envoyer un mail sera connu
# par cette adresse
root=root@mon-domaine.net

# L'adresse ou le nom de votre vrai serveur SMTP
mailhub=mon_serveur_smtp_reel

# Le domaine que ssmtp utilisera pour se présenter
rewriteDomain=monDomaine.net

# Le nom de machine que ssmtp utilisera pour se présenter
hostname=barbouze

Pour tester, nous allons maintenant utiliser l'ancestrale commande mail :

gaston$mail -s "Très important" administrateurs@monDomaine.net
Le café est en train de caraméliser !!
<CTRL-D>
EOT
gaston$
test de l'envoi de courriel

Si tout s'est bien passé le courriel va partir être transmis à ssmtp via la commande sendmail. Et ssmtp var contacter le serveur SMTP décrit par mailhub pour lui fournir notre message. Simple et efficace.

Vos remarques et commentaires...

Malic, le 27 juillet, 2007 - 11:57

sendmail, si ma mémoire est bonne, est tout à fait capable d'envoyer du mail sans être résident.
La partie résidente n'est utile que pour recevoir du mail.

Evidément, il faut quand même avoir une configuration valide pour envoyer avec sendmail sans être résident, ce qui n'est pas aussi simple que ssmtp.

Ulhume, le 27 juillet, 2007 - 12:38

Ah mais je ne dis pas que sendmail est résident, je dis que pour relayer vers un serveur smtp les mails locaux, il faudrait que sendmail soit configuré pour faire se relai (je ne sais pas si c'est faisable).

En général ce qui est préconisé est d'installer postfix dans ce but qui va surcharger la commande sendmail et faire ce relai.

ssmtp est juste une version méga light de tout cela.

malic, le 27 juillet, 2007 - 13:09

Pour juste faire du relai vers un autre server, c'est le paramêtre SmartRelay (ou DS) dans le fichier de conf, aprés ça, sendmail envoie tout ce qui n'est pas local à ce serveur.

Ulhume, le 27 juillet, 2007 - 14:27

Donc c'est faisable :) Ok c'est noté. Etant directement passé à postfix je n'ai jamais mis les pieds chez M. Sendmail.

Ceci dit, pour juste faire ce petit relai de mails d'alerte:

- sendmail (rpm) 1mo (doc non comprise)
- ssmtp (rpm) 22ko

Dab, le 27 juillet, 2007 - 14:59

La doc de sendmail nous dit: "On dit souvent que celui qui n'a jamais édité un fichier standard sendmail.cf n'est pas un véritable administrateur UNIX. La légende dit aussi qu'il ne faut pas le faire deux fois, sous peine de devenir fou"

Et c'est vrai :) ... A une époque j'avais testé les virtual domaines sous sendmail ... conclusion 3 semaines d'arrêt :)

Pour le relay il faut :

- Modifier le DS ( ex:DSmonserveur.mondomaine.fr <- relayage des mails vers monserveur.mondomaine.fr )
- Modifier le Dj si le nom de domaine du serveur sendmail n'est pas le nom de domaine connu sur internet (ex: Dj$w.toto.fr pour la reecriture du nom de domaine des mails )

AP, le 29 janvier, 2009 - 16:56

ssmtp avec mutt, c'est d'la balle. :)

On peut faire le pendant côté réception des messages.

Pour récupérer du courrier via POP3 ou IMAP, si on utilise un MTA, on lui adjoindra fetchmail qui va récupérer des courriers sur des comptes externes et les injecte via SMTP dans le MTA (postfix, exim, sendmail...). Si on souhaite se passer de MTA, le pendant de fetchmail s'appelle getmail (http://pyropus.ca/software/getmail). Il récupère du courrier et va le stocker dans un dossier de messagerie au format maildir ou mboxrd. Ensuite, une ligne dans le cron du genre (pour 2 comptes de messagerie externes) :

*/10 * * * * getmail -r ~/.getmail/getmailrc.compte1 -r ~/.getmail/getmailrc.compte2

Le fichier getmailrc ressemble à ceci (qui envoie ici les courriers à Procmail au lieu de les déposer directement) :

[options]
verbose = 1
readall = False
delete = True
message_log = ~/.getmail/getmail.log
unixfrom = True

[retriever]
type = SimplePOP3Retriever
server = pop.domaine.com
username = toto
password = bidule

[destination]
type = MDA_external
path = /usr/bin/procmail
arguments = ("-f", "%(sender)", "-m", "/home/app/.procmailrc")
user = toto

PS: Geshi met le bazar dans les blocs "code". Du coup les retour à la ligne ne sont pas bien pris en compte et les couleurs sont bizarres.

zarer, le 29 janvier, 2009 - 19:56

Pour ma part,j'utilise Mutt + Fetchmail + msmtp + procmail. Le tout en pop3... Par sécurité, j'ai ajouté une petite recette (entre autres) pour garder une copie de tous les mails entrants dans mon .procmailrc :

## Copie de sécurité de tous les mails entrants
:0c:
$HOME/Mail/mail.backup
| gzip >>sauvegarde_gmail.gz

Et pour tous les mails sortants, c'est Mutt qui se charge de conserver une petite copie :

set record="+sent"

c'est aussi de la balle !

Publier un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question est là pour déterminer si vous êtes humain ou pas...