Re: envoyer un mail par script bash

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Liste Guilde
Subject: Re: envoyer un mail par script bash
Aujourd'hui, Marc Hampartzoumian a écrit :
> #!/bin/bash
>
> telnet smtp.quelque.part 25 << __EOF__
> helo passerelle.adsl
> mail from: alerte_passerelle_adsl@???
> rcpt to: marc@???
> data
> Reply-To: marc@???
> Subject: alerte log
> Une nouvelle alerte a été générée.
> .
> QUIT
> __EOF__


Je vois à priori deux problèmes dans ton script :
    - il manque une ligne vide entre les en-têtes et le corps du
      message ;
    - les lignes doivent se terminer par CRLF dans le protocole SMTP.
Le dernier point n'est peut-être pas grave, sauf si on tombe sur un
serveur pointilleux sur les RFC.


Par ailleurs, je n'ai jamais réussi à faire marcher un script avec
telnet et je ne sais pas pourquoi. Mais ça marche bien avec netcat
(commande nc). Voici un exemple testé qui marche :

---------- Couper ici ----------
#!/bin/bash

mailhost=...
destinataire=...

recode ../crlf << EOF | nc -i 1 $mailhost smtp > /dev/null 2>&1
helo $HOSTNAME
mail from: $USER@$HOSTNAME
rcpt to: $destinataire
data
Date: $(date -R)
From: $USER@$HOSTNAME
To: $destinataire
Subject: Bonjour

Vous avez le bonjour du script bash.

A+.
.
quit
EOF
---------- Couper ici ----------

La commande recode sert à convertir les fins de lignes Unix en SMTP
(LF -> CRLF). L'option -i 1 dans netcat impose un délai de 1 s entre les
lignes. Sans ce délai ça marche mais le serveur renvoie plein d'erreurs
(il essaye d'interpréter les lignes du message comme des commandes SMTP,
je ne comprends pas pourquoi).

-- 
Edgar Bonet                         Tel :    +33 476 881 096
Laboratoire Louis Néel -- CNRS      Mobile : +33 663 384 906
25 av. des Martyrs, BP 166          Fax :    +33 476 881 191
38042 Grenoble cedex 9, France      e-mail : bonet@???