Le serveur de mail Postfix.
 est un serveur de mail écrit dans l'idée de remplacer , serveur de mail historique de moins en moins utilisé car sa configuration est très complexe et qu'il contient des failles de sécurité. 
Postfix effectue 99 % des fonctions de Sendmail, les 1% restant ne sont que purement applicable dans une minorité de cas. De plus, il allie performance et facilité d'installation et de paramétrage. 
Il existe de nombreux autres serveurs de mails, parmi les plus connus : , , , ...
Comment ça marche ?
Le schéma précédent nous propose trois cas de figure :
Installation de Postfix.
Installer en premier Postfix, si un autre serveur de mail est déjà présent, il le supprimera :
 # apt-get install postfix
Pour l'instant, nous laissons toutes les options par défaut, nous allons le configurer par la suite.
Une fois l'installation terminée, nous allons configurer Postfix.
 sudo adduser postfix sasl
 sudo dpkg-reconfigure postfix
Configuration de Postfix.
Le fichier de configuration principal de Postfix est codice_1. Copier le suivant en remplaçant codice_2 par le vrai domaine du serveur :
 mv /etc/postfix/main.cf /etc/postfix/main.oldcf # Archivage
 > /etc/postfix/main.cf # Blanchiment
 vim /etc/postfix/main.cf # Accès pour coller la configuration ci-dessous
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydomain = mondomaine.fr
myhostname = mail.$mydomain
mydestination = $mydomain, $myhostname, localhost, localhost.$mydomain
relayhost =
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
On peut visualiser la totalité des options possibles de Postfix et leurs valeurs par défaut via la commande postconf :
 # postconf | more
 2bounce_notice_recipient = postmaster
 access_map_reject_code = 554
 address_verify_default_transport = $default_transport
 address_verify_local_transport = $local_transport
 address_verify_map =
 address_verify_negative_cache = yes
 address_verify_negative_expire_time = 3d
En français ça donne : "délivre en local les emails vers codice_3 avec codice_4, sinon délivre-les sur Internet mais en refusant ceux qui ne viennent pas de codice_5 ou codice_6 (s'ils sont vides on accepte rien, s'ils sont commentés on accepte tout, même de relayer des spams)".
Une fois codice_7 sauvegardé pour la première fois, on vérifie que le fichier /etc/mailname contient le nom de domaine de notre réseau :
 # cat /etc/mailname
 mondomaine.fr
Chaque fois que l'on modifie le fichier /etc/postfix/main.cf, il faut relancer Postfix :
 # /etc/init.d/postfix restart
Pour chaque mail envoyé ou reçu, Postfix enregistre les informations d'acheminement dans le fichier /var/log/mail.log. Il est donc très utile de surveiller ce fichier durant les tests de fonctionnement.
Pour vérifier que le serveur de mail fonctionne, on envoi un mail à un utilisateur et on regarde le fichier /var/log/mail.log.
 # mail alex
 Subject: essai
 essai
 Cc:
 CTRL+D
Dans un autre terminal :
 # tail -f /var/log/mail.log
 Feb 13 13:10:40 mail postfix/pickup[13353]: B782A1FD6F: uid=0 from=<root>
 Feb 13 13:10:40 mail postfix/cleanup[13675]: B782A1FD6F: message-id=<20080213121040.B782A1FD6F@mail.mondomaine.fr>
 Feb 13 13:10:40 mail postfix/qmgr[13354]: B782A1FD6F: , size=355, nrcpt=1 (queue active)
 Feb 13 13:10:40 mail postfix/local[13677]: B782A1FD6F: , orig_to=<alex>, relay=local, delay=0.08, delays=0.04/0.02/0/0.02, dsn=2.0.0, (delivered to command: procmail -a "$EXTENSION")
 Feb 13 13:10:40 mail postfix/qmgr[13354]: B782A1FD6F: removed
Ajouter une boite aux lettres.
Pour ajouter une boite aux lettres, il existe trois solutions :
Les voici en lignes de commandes, mais elles sont aussi réalisables au moyen d'un webmail.
Nouveau compte système.
Pour des raisons de sécurité, on positionne le shell de l'utilisateur à /bin/false (ainsi il ne pourra pas se logger sur le serveur). Le mot de passe saisi sera celui de sa boite aux lettres. On rajoute l'utilisateur dans le groupe mail afin qu'il puisse écrire le fichier <login>.lock dans le répertoire /var/mail.
 # adduser --shell /bin/false --ingroup mail pierre
Adresse virtuelle.
Activer la fonction dans :
 vim /etc/postfix/main.cf
avec :
 virtual_alias_maps = hash:/etc/postfix/virtual
Ensuite il faut définir les adresses emails dans codice_8, sous forme de paires clé-valeur :
 postmaster@mail.mondomaine.fr root
Puis créer la base de données à partir du fichier :
 postmap /etc/postfix/virtual
 postfix reload
Alias.
Pour éditer la liste des adresses emails alias de celles d'une boite :
 vim /etc/aliases
Par exemple en y ajoutant les plus fréquents :
MAILER-DAEMON: root
postmaster: root
abuse: root
Ainsi, quelqu'un qui voudra reporter un problème à abuse@mondomaine.fr écrira dans la boite de root, ce qui sera visible par une notification à chaque fois que ce dernier se connectera en SSH.
Puis la commande codice_9 crée alors codice_10 à partir de cette liste.
MDA : filtres de courrier électronique.
Par défaut les emails des boites créées ci-dessus s'empilent tous dans un fichier de codice_11. Afin de les router vers des boites mails séparées, on utilise un ou plusieurs logiciels . 
Voici plusieurs exemples de MDA :
procmail.
Pour installer :
 $ sudo apt-get install procmail
 $ vim ~/.forward
"|IFS=' '&&exec /usr/bin/procmail -f-||exit 75 #user"
 $ vim ~/.procmailrc
PATH=/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
 $ maildirmake ~/Maildir
Explications :
Pour voir s'il fonctionne, envoyer un email à l'utilisateur configuré ci-dessus, puis regarder s'il est arrivé :
 ls -alh /home/user/Maildir/new/
En cas de problème :
 tail /var/log/mail.log
fetchmail.
Pour installer :
 apt-get install fetchmail
Il se configure avec :
 vim ~/.fetchmailrc
On peut par exemple lui dire de tout transférer vers procmail en y ajoutant :
 mda "/usr/bin/procmail -Y -d %T"
Ou bien lui faire récupérer directement des boites utilisateurs distantes avec : 
 poll example.com protocol pop3 username "user1" password "password1"
fetchmail peut récupérer les emails de fournisseurs externes, tels que Gmail, Yahoo ou Outlook.com, par cron. C'est un (MRA).
Dovecot.
En plus d'un MDA intégré, intègre un serveur POP ou IMAP. 
Tout comme pour fetchmail, il peut fonctionner en aval de procmail. Toutefois, il est possible de remplacer procmail par Dovecot dans codice_1 :
 mailbox_command = /usr/local/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
pour Ubuntu :
 mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
Ensuite, l'installation de Dovecot dépend du protocole souhaité dans le MUA qui viendra relever le courrier :
Serveur POP.
 apt-get install dovecot-pop3d
Serveur IMAP.
 apt-get install dovecot-imapd
IMAP nécessite le format de stockage Maildir. Nous allons donc tout d'abord configurer Postfix pour lui indiquer d'utiliser le format Maildir au lieu du traditionnel mbox.
On modifie le fichier codice_1. On commente l'option mailbox_command (qui appelle procmail) et on rajoute l'option home_mailbox :
 vim /etc/postfix/main.cf
 # Commenter la ligne :
 #mailbox_command = procmail -a "$EXTENSION"
 # Puis pour utiliser le format Maildir, ajouter :
 home_mailbox = Maildir/
On relance postfix :
 # /etc/init.d/postfix restart
Pour chaque utilisateur existant, il faut ensuite créer le répertoire "Maildir". On fait ceci à l'aide de la commande "maildirmake" fournie par "dovecot-imapd" ou "courrier-imap" :
 $ cd # pour retourner dans mon home directory
 $ maildirmake Maildir
 $ ls -l Maildir
 drwx------ 2 alex grpalex 4096 2008-02-13 13:58 cur
 drwx------ 2 alex grpalex 4096 2008-02-13 13:58 new
 drwx------ 2 alex grpalex 4096 2008-02-13 14:11 tmp
Pour automatiser la création du répertoire Maildir pour les nouveaux utilisateurs, on exécute la commande maildirmake dans le répertoire /etc/postmaster. Ainsi tous les nouveaux utilisateurs auront automatiquement le répertoire Maildir dans leur home directory :
 # cd /etc/postmaster
 # maildirmake Maildir
Webmails.
Par exemple pour la configuration ci-dessus avec Dovecot, codice_22 doit contenir codice_23.
SquirrelMail.
 est un webmail très simple à installer, qui fonctionne sans . Outre les envois et réceptions d'emails, il permet d'archiver en créant ou supprimant des dossiers.
Si n'est déjà le cas, on installe le serveur Web Apache :
 # apt-get install apache2
Pour installer SquirrelMail sous Debian, on tape la commande suivante :
 # apt-get install squirrelmail
On peut configurer Squirrelmail en utilisant le programme squirrelmail-configure. Ce fichier permet configurer le fichier /etc/squirrelmail/config.php. À noter que l'on peut modifier directement ce fichier sans passer par squirrelmail-configure.
SquirrelMail est fourni avec la section à rajouter à Apache pour l'activer. On va donc dans le répertoire de configuration de Apache pour lui indiquer d'utiliser ce fichier :
 # ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf
On relance Apache :
 # /etc/init.d/apache2 restart
On peut tester si SquirrelMail fonctionne avec son navigateur en se connectant à l'URL suivante :
 http://localhost/squirrelmail/
Postfixadmin.
Postfixadmin est un webmail qui fonctionne avec MySQL.
 apt-get install postfixadmin
Roundcube.
 est un webmail qui fonctionne avec MySQL, PostgreSQL, ou . Il est très ergonomique (glisser-déposer, effacement en masse avec Maj + clic puis Suppr), plus graphique mais plus lent et moins stable que SquirrelMail.
 apt-get install roundcube roundcube-mysql
 php5enmod mcrypt
 /etc/init.d/apache2 restart
Et voilà : http://localhost/roundcube
Configuration pour des envois distants.
Pour que les emails ne soient pas directement écartés ou classés dans les spams par les serveurs de messagerie des destinataires, il faut impérativement montrer patte-blanche de plusieurs façons :
Sécurisation TLS.
Tout d'abord, il faut générer une clé de cryptage asymétrique, puis indiquer son chemin dans codice_7 :
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
En cas d'erreur, on peut vérifier sa mise en place avec 
 openssl s_client -debug -starttls smtp -crlf -connect localhost:25
Pour plus d'information sur les certificats .pem, voir Apache/HTTPS.