Envoyer du courrier avec sendmail (page 2)

Sendmail page 1 Configurer Netscape
Configuration Internet 

Historique du document

Présentation

Configuration de sendmail

On relance tout

Principe de fonctionnement

Masquage de domaine

Attribution d'adresse dynamique

Si vous êtes inscrits à plusieurs FAI

Sendmail et timeout DNS

Sendmail et la lutte anti-spam

Attribution d'adresse dynamique

Vous pouvez redéfinir le nom de votre machine, tel qu'il apparaîtra dans les headers, pour qu'il corresponde exactement avec le nom que vous a attribué le fai, pendant une connexion et ceci même si ce nom change à chaque connexion. Je me sers d'un truc trouvé dans le guide du rootard que j'ai très légèrement adapté (au chapitre 13.10 pour être précis). Le truc c'est qu'à chaque connexion on lance un petit programme gethost qui détermine le nom attribué dynamiquement, on modifie dans la foulée le config.mc en conséquence, on regénère sendmail.cf, on kill sendmail et on le relance dans la foulée.
Pour cela j'ai créé un programme gethost.c dont voici le contenu:

#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>

int main(argc,argv)
char argc;
char *argv[];
{
        struct hostent *host;
        struct in_addr ia;

        if (argc < 2) {
         fprintf(stderr,"Usage: %s adresse_IP_locale\n",argv[0]);
         exit(1);
        }
        if (!inet_aton (argv[1],&ia)) {
         fprintf(stderr,"Erreur: adresse invalide\n");
         exit(1);
        }

        host=gethostbyaddr((char*)&ia,sizeof(ia),AF_INET);

        if (!host) {
         fprintf(stderr,"Erreur: adresse non trouvée ou pas de DNS\n");
         exit(1);
        }
        printf("%s\n",host->h_name);
        exit(0);
}

On le compile tout simplement en tapant:

gcc gethost.c -o gethost

En tant que root, copiez l'exécutable gethost sous /usr/local/sbin (ou /usr/bin c'est vous qui voyiez...). Maintenant on va modifier /etc/ppp/ip-up qui est lancé à chaque début de connexion pour reconstruire le fichier de config de sendmail en fonction du nom déterminé par gethost et relancer sendmail.

#!/bin/bash
 # $4 correspond à l'adresse IP attribuée lors d'une connexion
ADRESSE=$4

# détermination du nom connaissant l'adresse IP
HOST=`/usr/local/sbin/gethost $ADRESSE`

# on modifie le fichier de config pour avoir le nom qui va bien (à noter que config.mc n'est jamais touché)
if [ -n "$HOST" ] ; then
       sed s/ppp.fai.fr/$HOST/ /usr/lib/sendmail-cf/cf/config.mc > /usr/lib/sendmail-cf/cf/config.current.mc
      # on regénère sendmail.cf
     cd  /usr/lib/sendmail-cf/cf
     m4 config.current.mc > /etc/sendmail.cf

     # on tue sendmail
     kill -1 `head -1 /var/run/sendmail.pid`

     # on relance sendmail
     /usr/sbin/sendmail -bd -os
fi
exit 0

Autre solution beaucoup plus simple, si vous voulez pas vous embêter avec un programme C, remplacer la ligne HOST par:

HOST=`(nslookup $ADRESSE|grep Name:|sed 's/Name:*//')`

A la prochaine connexion, vous aurez donc un sendmail avec une config tip-top. Voilà un mail envoyé de mon poste linux:

------ Le serveur echo du domaine cnam.fr
------ a recu votre message le mer  1 déc 18:08:00 MET 1999

------ Ci-dessous les en-tetes et le corps de votre message
 

> From olivier.hoarau@fnac.net  Wed Dec  1 18:07:59 1999
> Received: from mailhub1.isdnet.net (mailhub1.isdnet.net [195.154.209.21])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id SAA27323
>         for <echo@cnam.fr>; Wed, 1 Dec 1999 18:07:59 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from ppp7-brest.isdnet.net (ppp7-brest.isdnet.net [194.149.178.134])
>       by mailhub1.isdnet.net (8.9.3/8.9.3) with ESMTP id SAA18750
>       for <echo@cnam.fr>; Wed, 1 Dec 1999 18:07:57 +0100 (CET)
> Received: from fnac.net
>         by fnac.net (8.9.3/8.9.3/Olivier Hoarau-992911) with ESMTP id SAA00908
>         for <echo@cnam.fr>; Wed, 1 Dec 1999 18:08:06 +0100
> Sender: olivier.hoarau@fnac.net
> Message-ID: <384555EA.84111C99@fnac.net>
> Date: Wed, 01 Dec 1999 17:07:57 +0000
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: FNAC.net
> X-Mailer: Mozilla 4.61 [en] (X11; I; Linux 2.2.13-7mdk i586)
> X-Accept-Language: fr, en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: de tavel netscape
> Content-Type: multipart/alternative;
>  boundary="------------510B10AEB1791042330882C7"

mon texte

------ Fin de votre message

Envoyé d'un poste client sous Windows:

------ Le serveur echo du domaine cnam.fr
------ a recu votre message le mer  1 déc 18:08:00 MET 1999

------ Ci-dessous les en-tetes et le corps de votre message
 

> From olivier.hoarau@fnac.net  Wed Dec  1 18:07:58 1999
> Received: from mailhub1.isdnet.net (mailhub1.isdnet.net [195.154.209.21])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id SAA27306
>         for <echo@cnam.fr>; Wed, 1 Dec 1999 18:07:58 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from ppp7-brest.isdnet.net (ppp7-brest.isdnet.net [194.149.178.134])
>       by mailhub1.isdnet.net (8.9.3/8.9.3) with ESMTP id SAA18743
>       for <echo@cnam.fr>; Wed, 1 Dec 1999 18:07:56 +0100 (CET)
> Received: from fnac.net
>         by fnac.net (8.9.3/8.9.3/Olivier Hoarau-992911) with ESMTP id SAA00910
>         for <echo@cnam.fr>; Wed, 1 Dec 1999 18:08:31 +0100
> Message-ID: <3845554F.7814F4EB@fnac.net>
> Date: Wed, 01 Dec 1999 18:05:20 +0100
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: FNAC net
> X-Mailer: Mozilla 4.61 [en] (Win95; I)
> X-Accept-Language: fr-FR,en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: shuttle
> Content-Type: text/plain; chars
et=us-ascii
> Content-Transfer-Encoding: 7bit

------

texte

------ Fin de votre message

NOTE: A noter que de temps à autre, il n'est pas possible de déterminer le nom d'hôte dynamique de la machine attribué lors de la connexion, et cela quelque soit la manière utilisée pour le faire (avec gethost ou nslookup). C'est pour ça que dans le script ip-up vous trouvez un test sur la valeur de HOST (vide ou non vide).

Si vous êtes inscrits à plusieurs FAI

Si vous êtes inscrits à plusieurs FAI comme moi, le problème avec qu'avec la configuration que je viens de présenter, vous ne pouvez envoyer du courrier qu'avec un FAI. Voici donc mon script qui permet de pouvoir renconfigurer sendmail à chaque connexion conformément au FAI utilisé.
Tout se passe dans le fichier /etc/ppp/ip-up voici le mien

#!/bin/bash

# This file should not be modified -- make local changes to
# /etc/ppp/ip-up.local instead
# l'argument 4 correspond à l'adresse IP attribuée par le FAI
# l'argument 6 correspond est passé en argument de la commande pppd juste
# après ipparam, voir /etc/ppp/ppp-on dans la page connexion à plusieurs FAI
ADRESSE=$4
CONNEXION=$6

# écriture des paramètres de connexion dans un fichier de log
echo " " >> /var/log/connex
echo "Connecté à $CONNEXION adresse $4 le " >> /var/log/connex
date >> /var/log/connex

# suivant le FAI, on définit le nom du serveur SMTP, de l'identité à apparaître
# dans les champs RECEIVED et les emails chez le FAI
case $CONNEXION in
        fnac)
                SERVEUR=smtp.fnac.net
                REC=fnac.net
                MAIL_O=olivier.hoarau@fnac.net
                MAIL_V=veronique.hoarau@fnac.net
                ;;
        liberty)
                SERVEUR=mail.libertysurf.fr
                REC=libertysurf.fr
                MAIL_O=olivier.hoarau2@libertysurf.fr
                MAIL_V=veronique.hoarau@libertysurf.fr
                ;;
        free)
                SERVEUR=smtp.free.fr
                REC=free.fr
                MAIL_O=ohoarau@free.fr
                MAIL_V=veronique.hoarau@free.fr
                ;;
        waika9)
                SERVEUR=smtp.waika9.com
                REC=waika9.com
                MAIL_O=olivier.hoarau@waika9.com
                MAIL_V=veronique.hoarau@waika9.com
                ;;
        *)
        echo "Nom de connexion inconnu $CONNEXION ??"
        exit 0
                ;;
esac

# on met à jour le serveur SMTP
sed s/smtp.fnac.net/$SERVEUR/ /usr/lib/sendmail-cf/cf/config.mc >/tmp/config.mc

# maintenant on met à jour la variable confDOMAIN_NAME
HOST=`/usr/local/sbin/gethost $ADRESSE`
#ou si vous préférez
#HOST=`(nslookup $ADRESSE|grep Name:|sed 's/Name:*//')` 

echo "Nom de l'hote $HOST" >> /var/log/connex
if [ -n "$HOST" ] ; then
        sed s/ppp.fnac.net/$HOST/ /tmp/config.mc >/tmp/config2.mc
else
        # rajout du 6.1.00
        cat /tmp/config.mc > /tmp/config2.mc
fi

# on met à jour l'identité dans les champs RECEIVED
sed s/fnac.net/$REC/g /tmp/config2.mc >/usr/lib/sendmail-cf/cf/config.current.mc

# on regénère sendmail.cf
cd /usr/lib/sendmail-cf/cf
m4 config.current.mc > /etc/sendmail.cf

# on réécrit /etc/genericstable
# ATTENTION tabulation après le :
cat <<END_OF-DATA > /etc/genericstable
olivier:        $MAIL_O
veronique:      $MAIL_V
END_OF-DATA
# et on regénère genericstable.db
/usr/sbin/sendmail -bi -oA/etc/genericstable

# on réécrit pirateo
cat <<END_OF-DATA > /etc/mail/pirateo
$MAIL_O olivier
$MAIL_V veronique
END_OF-DATA
# on regénère au format qui va bien
makemap hash /etc/mail/pirateo < /etc/mail/pirateo

# on relance sendmail
kill -1 `head -1 /var/run/sendmail.pid`
/usr/sbin/sendmail -bd -os -X /var/log/sendmail.log

echo "Expédition du courrier en attente" >> /var/log/connex
/usr/sbin/sendmail -q -v >> /var/log/connex

exit 0

Voilà donc la tête du message renvoyé par le service écho du CNAM et expédié de mon poste linux alors que j'étais connecté avec Free et en me servant de la commande mail de cette façon:

mail -v echo@cnam.fr < /tmp/mon-mail

Voici le mail renvoyé:

------ Le serveur echo du domaine cnam.fr
------ a recu votre message le sam 11 déc 14:25:23 MET 1999

------ Ci-dessous les en-tetes et le corps de votre message
 

> From ohoarau@free.fr  Sat Dec 11 14:25:22 1999
> Received: from postfix1.free.fr (postfix@postfix1.free.fr [212.27.32.21])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id OAA30761
>         for <echo@cnam.fr>; Sat, 11 Dec 1999 14:25:22 +0100 (MET)
> From: ohoarau@free.fr
> Return-Path: <ohoarau@free.fr>
> Received: from velizy-27-60.dial.proxad.net (velizy-27-60.dial.proxad.net [213.228.27.60])
>       by postfix1.free.fr (Postfix) with ESMTP id 8AAA3281B1
>       for <echo@cnam.fr>; Sat, 11 Dec 1999 14:23:21 +0100 (MET)
> Received: from free.fr
>         by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) id OAA01011
>         for echo@cnam.fr; Sat, 11 Dec 1999 14:26:15 +0100
> Date: Sat, 11 Dec 1999 14:26:15 +0100
> Message-Id: <199912111326.OAA01011@velizy-27-60.dial.proxad.net>
> To: echo@cnam.fr

------

>
> texte
>

------ Fin de votre message

Ze problème maintenant vient de Netscape Messenger, en effet avec ce dernier quand vous êtes logués sous un compte, vous définissez une adresse email unique, pas moyen d'avoir plusieurs configurations comme sous Windows. Chez moi dans Netscape, j'ai défini olivier.hoarau@fnac.net pourtant quand je me connecte chez Free, les mails sont parfaitement relayés, il n'y a aucune vérification du nom de domaine, c'est limite inquiétant pour les histoires de spam. Vous n'avez cependant pas intérêt à mettre un email du genre mickey.mouse@disneyworld.com, car personne ne pourra vous répondre.
Voici le contenu du mail envoyé d'un de mes postes clients

------ Le serveur echo du domaine cnam.fr
------ a recu votre message le sam 11 déc 14:56:43 MET 1999

------ Ci-dessous les en-tetes et le corps de votre message
 

> From olivier.hoarau@fnac.net  Sat Dec 11 14:56:42 1999
> Received: from postfix1.free.fr (postfix@postfix1.free.fr [212.27.32.21])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id OAA32210
>         for <echo@cnam.fr>; Sat, 11 Dec 1999 14:56:42 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from velizy-27-60.dial.proxad.net (unknown [213.228.40.12])
>       by postfix1.free.fr (Postfix) with ESMTP id 5A2AA28318
>       for <echo@cnam.fr>; Sat, 11 Dec 1999 14:54:40 +0100 (MET)
> Received: from free.fr
>         by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) with ESMTP id OAA01077
>         for <echo@cnam.fr>; Sat, 11 Dec 1999 14:52:42 +0100
> Message-ID: <38525657.C711C933@fnac.net>
> Date: Sat, 11 Dec 1999 14:49:12 +0100
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: FNAC net
> X-Mailer: Mozilla 4.61 [en] (Win95; I)
> X-Accept-Language: fr-FR,en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: shuttle
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit

------

>
> texte
>

------ Fin de votre message

Pour en avoir le coeur net je me suis envoyé d'un poste client un mail avec en destinataire mon compte chez libertysurf avec pour email déclaré dans Netscape mickey.mouse@disneyworld.com voici le corps du mail reçu:

Return-Path: <mickey.mouse@disneyworld.com>
Received: from free.fr
        by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) with ESMTP id PAA01225
        for <olivier@localhost>; Sat, 11 Dec 1999 15:11:42 +0100
Received: from pop.libertysurf.fr
        by localhost with POP3 (fetchmail-5.0.3)
        for olivier@localhost (single-drop); Sat, 11 Dec 1999 15:11:42 +0100 (CET)
Received: by mailhub5.libertysurf.fr (mbox login-pop-chez-libertysurf)
 (with Cubic Circle's cucipop (v1.31 1998/05/13) Sat Dec 11 15:13:54 1999)
X-From_: mickey.mouse@disneyworld.com Sat Dec 11 15:13:07 1999
Received: from postfix1.free.fr (postfix1.free.fr [212.27.32.21])
        by mailhub5.libertysurf.fr (8.9.3/8.9.3) with ESMTP id PAA74338
        for <olivier.hoarau2@libertysurf.fr>; Sat, 11 Dec 1999 15:13:07 +0100 (CET)
Received: from velizy-27-60.dial.proxad.net (unknown [213.228.40.67])
        by postfix1.free.fr (Postfix) with ESMTP id C3E7C282BC
        for <olivier.hoarau2@libertysurf.fr>; Sat, 11 Dec 1999 15:07:51 +0100 (MET)
Received: from free.fr
        by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) with ESMTP id PAA01172
        for <olivier.hoarau2@libertysurf.fr>; Sat, 11 Dec 1999 15:07:16 +0100
Message-ID: <385259C3.5860B95@disneyworld.com>
Date: Sat, 11 Dec 1999 15:03:47 +0100
From: Mickey Mouse <mickey.mouse@disneyworld.com>
Organization: Disney World
X-Mailer: Mozilla 4.61 [en] (Win95; I)
X-Accept-Language: fr-FR,en
MIME-Version: 1.0
To: olivier.hoarau2@libertysurf.fr
Subject: de shuttle
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mozilla-Status: 8001
X-Mozilla-Status2: 00000000

essai

Gloups !! ça marche... Bon heureusement c'est pas du vrai spam, on voit l'origine velizy-27-60.dial.proxad.net avec adresse IP 213.228.40.67, mais ça permet de faire quelques bonnes blagues. A noter que c'est exactement pareil avec libertysurf.

Sendmail et timeout DNS

Si avec Microsoft Internet Mail, il est impossible d'envoyer des mails d'un poste Windows vers le serveur Linux quand celui-ci est offline, avec l'erreur suivante dans les fichiers de log:

00762 >>> 220 machine.domaine.fr ESMTP Sendmail 8.9.3/8.9.3/Commentaire quelconque qui apparaitre dans l'entete - 15/08/99; Sat, 21 Aug 1999 09:32:54 +0200
00762 <<< EHLO windows
00762 >>> 250-machine.domaine.fr Hello windows.domaine.fr [192.168.13.11], pleased to meet you
00762 >>> 250-EXPN
00762 >>> 250-VERB
00762 >>> 250-8BITMIME
00762 >>> 250-SIZE
00762 >>> 250-DSN
00762 >>> 250-ONEX
00762 >>> 250-ETRN
00762 >>> 250-XUSR
00762 >>> 250 HELP
00762 <<< RSET
00762 >>> 250 Reset state
00762 <<< MAIL FROM:<toto.nom@fai.fr>
00763 >>> 250 <toto.nom@fai.fr>... Sender ok
00763 <<< RCPT TO:<echo@cnam.fr>
00763 >>> 250 <echo@cnam.fr>... Recipient ok
00763 <<< [EOF]
00763 >>> 421 machine.domaine.fr Lost input channel from windows.domaine.fr [192.168.13.11]

Et que par contre il n'y a aucun problème quand le serveur est on-line. C'est que vous avez un problème de DNS. A noter que le problème est similaire avec Outlook Express et d'une manière générale avec les outils de mail de Microsoft .

Si avec Netscape l'envoi de mail en mode off-line vers la file d'attente (répertoire mqueue) prend au moins 80s autant dire un éternité, que ce soit d'un poste client ou du poste serveur. C'est que vous avez aussi un problème de DNS.

Pour résoudre ça, il faut installer un serveur DNS sur sa machine.

Sendmail et la lutte anti-spam

De temps à autre en récupérant le courrier, vous pouvez avoir le message suivant:

fetchmail: reading message 31 of 38 (1725 octets) .fetchmail: SMTP error: 553 <frombase64to8bitbymailhub1.isdnet.netidNAA43439>... Domain name required

Certains de vos mails entrants sont tout bonnement rejeté, en jetant un coup d'oeil dans /var/log/maillog et en activant l'option de débug de sendmail, on se rend compte que ce sont les emails avec des noms de domaines non reconnu par le DNS du fai qui sont rejetés, en clair c'est une protection par défaut anti-spam de sendmail que je ne compte pas désactiver.
 
 

Retour haut de la page