FUNIX

Mettez un manchot dans votre PC


Encourager FUNIX

La consultation du site est totalement libre et gratuite, sans publicités. Les dons sont néanmoins appréciés pour payer l'hébergement et encourager son auteur


Installation d'un serveur POP et IMAP
[ Présentation de la configuration | Configuration de la réception du mail   ( Avec fetchmail de mode root  , Avec fetchmail en mode daemon Configuration de procmail ) |  Configuration d'un serveur POP | Configuration d'un serveur IMAP | installer le webmail Roundcube mail ( installation , mise à jourutilisation  ,  personnalisation )  ]

Dernière modification 30 septembre 2023

Réception de courrier et mise à disposition (POP, IMAP et webmail)

Gestion des mails


( ce document est disponible au format pdf dans la rubrique téléchargement)

Présentation de la configuration

Cette page a pour objet de vous présenter comment récupérer les mails des utilisateurs de votre réseau et les mettre à  leur disposition.  Le rôle des différents outils présentés dans cette page est le suivant:

- fetchmail permet de récupérer les mails des utilisateurs de votre réseau sur plusieurs serveurs POP ou IMAP accessibles sur internet

- sendmail (MTA mail transport agent) permet de gérer localement la réception des mails et d'appliquer certains filtres anti spam et anti virus

- procmail (MDA mail delivery agent) permet de délivrer les mails et les dispatcher suivant le destinataire, il peut également appliquer d'autres filtres

- les serveurs POP ou IMAP permet de rendre accessible aux lecteurs de mails (MUA Mail User Agent) de votre réseau les mails qui sont arrivés, que vos clients soient sous windows ou sous unix.

- le serveur webmail permet de gérer les mails via un navigateur, y compris d'un téléphone mobile, en toute indépendance, c'est à dire en hébergeant son propre serveur et ses dossiers de mails sans dépendre d'un quelconque google qui n'aura aucun scrupule à consulter vos mails. Pour cela il faudra rendre son serveur apache visible d'internet, tout l'intérêt de la manip est de rendre accessible d'internet que le serveur apache, il n'est pas nécessaire d'ouvrir les ports du serveur POP, IMAP ou SMTP.

Un petit schéma vaut mieux qu'un grand discours, cela donne quelque chose comme cela pour la réception et l'envoi de mail.



Niveau architecture tout ce qui est en vert dont le serveur IMAP ou POP et les services de récupération de mail fetchmail/procmail tourne sur un serveur de votre réseau domestique, c'est sur même machine qu'on concentrera la récupération des mails des utilisateurs du réseau issus des différents serveurs de mail qu'on peut trouver sur le net accessibles via IMAP ou POP (version sécurisée ou non). Sur les postes clients il n'y a rien à  installer de particulier, mise à  part un client de messagerie classique comme thunderbird dans lequel on configurera le serveur POP ou IMAP local pour récupérer les mails et le serveur sendmail local pour l'émission ou plus  simple encore un simple navigateur qui va accéder au webmail.

Dans la pratique j'ai choisi d'installer plutôt un serveur IMAP plutôt que POP car il permet de pouvoir gérer une arborescence de dossiers de mails, c'est à dire sous thunderbird j'ai initialement classé mes mails dans des dossiers et sous dossiers, seul IMAP permet de retrouver la même arborescence avec le webmail à partir d'un navigateur ou d'un mobile, mais dans ce cas il faut utiliser le format de stockage des mails maildir plutôt que mbox, le tout est détaillé plus loin.

Complémentaire à  cette page, consultez également les pages:

- filtrage anti spam et anti virus
- sendmail pour gérer la réception et l'envoi du courrier


Configuration de la réception du mail

Avec fetchmail en mode root

Pour une version multi utilisateurs, vous avez la possibilité de lui indiquer d'aller récupérer toutes les heures en rajoutant le script recupmail dans le répertoire /etc/cron.hourly/ voilà  son contenu

#bin/bash

/usr/bin/fetchmail -a -f /root/.fetchmailrc -L /var/log/fetchmail.log
echo "" >> /var/log/fetchmail.log

ATTENTION les commandes lancées dans ce fichier doivent être indiquées avec leur chemin complet. Le fichier /var/log/fetchmail.log doit d'abord être créé avec un touch.

Maintenant root doit créer un fichier .fetchmailrc qui doit se trouver dans sa home directory avec les droits 600 (chmod 600 ~/.fetchmailrc ). Ce fichier contient les lignes suivantes:

set logfile /var/log/fetchmail.log

poll pop.fai.fr protocol pop3
 user login-fai there with password password-fai is olivier here

poll pop.fnac.net protocol pop3
 user login-fnac there with password password-fnac is olivier here

poll pop.free.fr protocol pop3
 user login-free there with password password-free is olivier here

poll pop.ifrance.com protocol pop3
 user login-ifrance there with password password-ifrance is olivier here

poll pop.fnac.net protocol pop3
 user login2-fnac there with password password2-fnac is veronique here

poll pop.ifrance.com protocol pop3
 user login2-ifrance there with password password2-ifrance is veronique here

poll pop.libertysurf.fr protocol pop3
 user login-liberty there with password password-liberty is olivier here

Le fichier fetchmail sous /var/log est le fichier de log, pop.fai.fr est le nom du serveur pop de votre provider. login-fai est le nom de votre login chez votre provider, password-fai est le mot de passe chez le provider, olivier est le login de l'utilisateur local correspondant. Vous rajoutez autant de ligne poll et user que vous avez de compte pop à  droite et à  gauche, vous noterez qu'on peut en profiter pour relever les emails d'autres utilisateurs de votre réseau (dans l'exemple utilisateur du réseau privé veronique).

ATTENTION: les mots de passe sont marqués en clair (d'où les droits du fichier...).

maintenant si votre FAI a mis en place un serveur POP avec connexion sécurisée avec TLS/SSL on va rajouter l'option qui va bien comme ceci

poll pop.libertysurf.fr protocol pop3
 user login-liberty there with password password-liberty is olivier here
 option ssl;

il faudra rajouter ensuite l'option --sslcertck à  la commande fetchmail comme ceci

/usr/bin/fetchmail --sslcertck -a -f /root/.fetchmailrc -L /var/log/fetchmail.log

Par défaut fetchmail se repose ensuite sur le serveur SMTP (en l’occurrence sendmail) qui tourne sur la machine sur le port 25 pour délivrer les mails. Dans le cas où vous utilisez un serveur SMTP avec une connexion chiffrée TLS/SSL sur le port 465 fetchmail ne saura pas délivrer les mails. Dans ce cas il faudra se servir de procmail comme MDA (mail delivery agent) et faire la modification suivante dans le fichier .fetchmailrc

poll pop.libertysurf.fr protocol pop3
 user login-liberty there with password password-liberty is olivier here
 mda "/usr/bin/procmail -d %T"

Nota : En revanche la conséquence d'avoir mis mda "/usr/bin/procmail -d %T" est qu'on ne passe plus par le serveur smtp local (par sendmail dans mon cas) et si vous aviez mis en place tout un appareillage de lutte anti spam avec spamassassin notamment, il ne sera pas utilisé, c'est gênant. Dans ce cas on rajoutera dans le ficher .procmailrc les lignes suivantes pour indiquer qu'on veut lancer spamc qui va invoquer le daemon spamd pour vérification.

:0fw
| /usr/local/bin/spamc

Vous avez aussi la possibilité en tant que simple utilisateur de créer votre propre fichier .fetchmailrc (syntaxe idem plus haut si ce n'est le chemin du fichier de log où vous devez avoir les droits d'écriture) que vous placerez dans votre homedirectory  et de lancer fetchmail d'un shell.  Vous pouvez très bien récupérer également les mails des autres utilisateurs de votre réseau.


Avec fetchmail en mode daemon

Le problème d'utiliser fetchmail pour récupérer les mails de plusieurs comptes locales et qu'on se retrouve avec cette erreur

/etc/cron.hourly/recupmail:
fetchmail: Avertissement: appeler fetchmail avec les privilèges de « root » est déconseillé.

On va donc l'utiliser en mode daemon plus sécurisé, il faudra installer le package fetchmail-daemon qui installera le fichier /usr/lib/systemd/system/fetchmail.service qui contient :

[Unit]
Description=A remote-mail retrieval utility
After=local-fs.target network.target

[Service]
User=mail
EnvironmentFile=-/etc/sysconfig/fetchmail
ExecStart=/usr/bin/fetchmail -d ${FETCHMAIL_POLL} --syslog -f /etc/fetchmailrc
RestartSec=1

[Install]
WantedBy=multi-user.target

Par  défaut les logs seront archivés par systemd  et visibles avec journalctl

le fichier /etc/sysconfig/fetchmail contient

# Customized settings for fetchmail

# Define nice level for fetchmail
SERVICE_RUN_NICE_LEVEL="+5"

# Define polling interval in seconds
FETCHMAIL_POLL=1800

on pourra adapter l'intervalle de récupération, je l'ai fixé à 30min (par défaut il est à 5min) et maintenant /etc/fetchmailrc contient un fichier identique (sans la ligne log setfile), ce fichier appartient à l'utilisateur mail (groupe mail). Maintenant on rend actif le service

systemctl enable fetchmail.service
Created symlink /etc/systemd/system/multi-user.target.wants/fetchmail.service → /usr/lib/systemd/system/fetchmail.service.

et on le lance en tapant

systemctl start fetchmail

et pour connaître son état on tapera

systemctl status fetchmail

voilà le résultat

● fetchmail.service - A remote-mail retrieval utility
     Loaded: loaded (/usr/lib/systemd/system/fetchmail.service; enabled; vendor preset: disabled)
     Active: active (running) since Sun 2021-09-12 10:50:27 CEST; 15s ago
   Main PID: 61259 (fetchmail)
      Tasks: 1 (limit: 4677)
     Memory: 2.8M
        CPU: 81ms
     CGroup: /system.slice/fetchmail.service
             └─61259 /usr/bin/fetchmail -d 1800 --syslog -f /etc/fetchmailrc

sept. 12 10:50:27 mana.kervao.fr systemd[1]: Started A remote-mail retrieval utility.
sept. 12 10:50:28 mana.kervao.fr fetchmail[61259]: démarrage de fetchmail 6.4.8 en tâche de fond
sept. 12 10:50:29 mana.kervao.fr fetchmail[61259]: 1 message pour olivier.hoarau@funix.org dans pop.xxx.net (63018 octets).
sept. 12 10:50:39 mana.kervao.fr fetchmail[61259]: lecture du message olivier.hoarau@funix.org@pop.xxx.net:1 parmi 1 (63018 octets) éliminé
sept. 12 10:50:40 mana.kervao.fr fetchmail[61259]: 3 messages pour veronique.hoarau@funix.org dans pop.xxx.net (181971 octets).

on pensera au besoin à supprimer le fichier /etc/cron.hourly/recupmail


Configuration de procmail

Dans le cas d'un serveur POP

Il n'y a rien de particulier à mettre en place, à noter que les mails sont stockés au format mbox, mbox est le format historique UNIX il consiste grosso modo à mettre tous les mails d'un dossier dans un fichier unique.

Dans le cas d'un serveur IMAP

En utilisant un serveur IMAP les mails doivent être stockés au format Maildir et non mbox, avec maildir chaque mail est un fichier et chaque dossier est un répertoire. Dans le cas présent, chaque utilisateur créera un fichier .procmailrc contenant

DEFAULT="$HOME/Maildir/"
ORGMAIL=$DEFAULT
LOGFILE="$HOME/procmail.log"
MAILDIR="$HOME/Maildir/"
VERBOSE=on

on indique ainsi qu'on va utiliser le format maildir.

Astuces de filtrage

A titre d'information, vous trouverez ci-dessous quelques astuces datées pour mettre en évidence les capacités de filtrage de procmail.

Procmail permet de trier le courrier reçu par fetchmail. pour cela tout utilisateur avec son .fetchmailrc doit avoir un .procmailrc également dans sa home directory. Si je prends mon exemple, je disposais d'un compte pop unique chez mon provider fnac.net, mon adresse email était olivier.hoarau@fnac.net, mon compte local est olivier, celle de ma tendre et chère veronique.hoarau@fnac.net et compte local veronique. Si je veux expédier à  Véronique tous les courriers dont les champs Destinataire (To) ou Copie (Cc) contiennent le champ veronique ou Véronique ou encore Veronique, voici la tête de mon .procmailrc

 #olivier
:0 c
*^(To|Cc|Bcc):*(veronique|Veronique)
!veronique

Celui de ma femme aura cette tête là :
 
#veronique
:0 c
*^(To|Cc|Bcc):*(olivier|Olivier|funboard|Funboard)
!olivier

Je suis abonné à  une liste funboard, c'est le nom de la liste qui apparaît dans la liste du destinataire ou du destinataire en copie, et non pas mon nom, d'où le critère de tri.

Le ! réexpédie localement le courrier vers le bon destinataire. Vous pouvez très bien aussi faire un fichier unique pour chaque utilisateur qui aura cette tête là :

#redirection vers veronique
:0 c
*^(To|Cc|Bcc):*(veronique|Veronique)
!veronique

#redirection vers olivier
:0 c
*^(To|Cc|Bcc):*(olivier|Olivier|funboard|Funboard)
!olivier

# les autres mails au destinataire non identifié vont vers olivier, vous pouvez très bien mettre /dev/null (poubelle) à  la place de !olivier
:0
*.*
!olivier

A noter que le petit c permet de pouvoir gérer les copies, en son absence si un mail arrive avec pour destinataire (To) Véronique et Olivier en copie (Cc), ce n'est que le premier dans la liste qui recevra le mail (en l’occurrence Véronique dans mon exemple de fichier), c permet qu'olivier reçoive aussi le courrier.

Si vous disposez d'un email unique avec un seul email rattaché et que vous comptez vous en servir pour plusieurs personnes. Vous pouvez demander à  vos interlocuteurs de préciser dans le sujet du mail le destinataire et faire un tri similaire à  celui vu précédemment en filtrant sur le champ Subject du mail (*^(Subject):*(veronique|Veronique)).



Configuration du serveur POP

Vous devez installer le package dovecot, voilà  le résultat

Generating a 2048 bit RSA private key
...................+++
..........................................+++
writing new private key to '/etc/pki/tls/private/dovecot.pem'
-----

le message précédent correspond à  la création des clés pour les connexions SSL. Le package dovecot contient le serveur imap et pop3, pour ma part j'utilise ce dernier. Voilà  mon fichier /etc/dovecot/dovecot.conf en configurant un serveur pop3

## Dovecot configuration file

# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration

# "doveconf -n" command gives a clean output of the changed settings. Use it
# instead of copy&pasting files when posting to the Dovecot mailing list.

# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "

# Most (but not all) settings can be overridden by different protocols and/or
# source/destination IPs by placing the settings inside sections, for example:
# protocol imap { }, local 127.0.0.1 { }, remote 10.0.0.0/8 { }

# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

# Protocols we want to be serving.
#protocols = imap pop3 lmtp
protocols = pop3

# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
#listen = *, ::
listen = *

# Base directory where to store runtime data.
#base_dir = /var/run/dovecot/

# Name of this instance. In multi-instance setup doveadm and other commands
# can use -i <instance_name> to select which instance is used (an alternative
# to -c <config_path>). The instance name is also added to Dovecot processes
# in ps output.
#instance_name = dovecot

# Greeting message for clients.
#login_greeting = Dovecot ready.

# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
#login_trusted_networks =

# Space separated list of login access check sockets (e.g. tcpwrap)
#login_access_sockets =

# With proxy_maybe=yes if proxy destination matches any of these IPs, don't do
# proxying. This isn't necessary normally, but may be useful if the destination
# IP is e.g. a load balancer's IP.
#auth_proxy_self =

# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
#verbose_proctitle = no

# Should all processes be killed when Dovecot master process shuts down.
# Setting this to "no" means that Dovecot can be upgraded without
# forcing existing client connections to close (although that could also be
# a problem if the upgrade is e.g. because of a security fix).
#shutdown_clients = yes

# If non-zero, run mail commands via this many connections to doveadm server,
# instead of running them directly in the same process.
#doveadm_worker_count = 0
# UNIX socket or host:port used for connecting to doveadm server
#doveadm_socket_path = doveadm-server

# Space separated list of environment variables that are preserved on Dovecot
# startup and passed down to all of its child processes. You can also give
# key=value pairs to always set specific settings.
#import_environment = TZ

##
## Dictionary server settings
##

# Dictionary can be used to store key=value lists. This is used by several
# plugins. The dictionary can be accessed either directly or though a
# dictionary server. The following dict block maps dictionary names to URIs
# when the server is used. These can then be referenced using URIs in format
# "proxy::<name>".

dict {
  #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

}

Maintenant dans le répertoire /etc/dovecot/conf.d il y a deux, trois bricoles à  modifier

Dans le fichier 10-ssl.conf on spécifie qu'on utilise une connexion chiffrée par SSL entre le serveur et le client en mettant

ssl = required

ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem

dans le fichier 10-auth.conf on va mettre

disable_plaintext_auth = yes
auth_mechanisms = plain

en effet comme on utilise SSL on peut utiliser un mécanisme d'authentification en clair.

maintenant dans le fichier auth-system.conf.ext on indique qu'on passe par PAM

passdb {
  driver = pam
  # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
  # [cache_key=<key>] [<service name>]
  #args = dovecot
}
userdb {
  # <doc/wiki/AuthDatabase.Passwd.txt>
  driver = passwd
  # [blocking=no]
  #args =

  # Override fields from passwd
  #override_fields = home=/home/virtual/%u
}

dans le fichier 10-mail.conf on indique que les mailbox au format mbox se trouvent sous /var/mail et portent le nom de chaque utilisateur du système

mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group = mail

maintenant on relance dovecot

systemctl restart dovecot

normalement on devrait avoir un message comme celui-ci

nov. 24 16:23:42 mana.kervao.fr dovecot[27325]: master: Dovecot v2.2.13 starting up for imap, pop3 (core dumps disabled)

si vous avez l'erreur suivante

oct. 10 10:49:26 mana.kervao.fr dovecot[19551]: pop3(olivier): Error: chown(/home/olivier/mail/.imap, group=12(mail)) failed: Operation not permitted (egid=5000(hoarau), group based on /var/mail/olivier - see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
oct. 10 10:49:26 mana.kervao.fr dovecot[19551]: pop3(olivier): Error: Couldn't open INBOX: Permission denied

il faudra modifier les droits des boites aux lettres comme ceci /var/mail

chmod 0600 /var/mail/*

Du coté poste client, configurer votre logiciel de mail favori pour que votre serveur Linux soit le serveur POP (il suffit de rajouter le nom du poste en question dans le champ qui va bien), au niveau de la sécurité de connexion on indique SSL/TLS. Exemple ici avec thunderbird


à  la première connexion il faudra sans doute confirmer l'exception de sécurité pour votre serveur de mail



et puis c'est tout, les courriers seront récupérés dans /var/spool/mail du serveur.

Si jamais un jour ou l'autre votre client de messagerie préféré vous sort que le certificat du serveur est expiré et plus valide, il faudra le renouveler. Pour cela on va commencer par sauvegarder la clé privée et le certificat de dovecot en tapant:

cp /etc/ssl/private/dovecot.pem /etc/ssl/private/dovecot.pem.old
cp /etc/ssl/certs/dovecot.pem /etc/ssl/certs/dovecot.pem.old


on crée une nouvelle clé privée

openssl genrsa -out /etc/ssl/private/dovecot.pem 1024

voilà  le résutat

Generating RSA private key, 1024 bit long modulus
..................++++++
.........++++++
e is 65537 (0x010001)

on crée le nouveau certificat d'une durée de validité de 2 ans. Il est bien évident que ce certificat est perso et n'a aucune validité sur internet, il sera utile pour un usage strictement privé.

openssl req -new -x509 -key /etc/ssl/private/dovecot.pem -out /etc/ssl/certs/dovecot.pem -days 730

voilà  le résultat

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Bzh
Locality Name (eg, city) []:Brest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:none
Organizational Unit Name (eg, section) []:none
Common Name (e.g. server FQDN or YOUR name) []:mana
Email Address []:olivier.hoarau@funix.org

on relance dovecot

systemctl stop dovecot.service
systemctl start dovecot.service

il faudra sans doute à  nouveau accepter le nouveau certificat dans le client de messagerie

Si dans les logs vous avez ce type de message

janv. 04 17:59:36 mana.kervao.fr dovecot[29061]: master: Warning: /power is no longer mounted. See http://wiki2.dovecot.org/Mountpoints

c'est un point de message qui a disparu, il suffit de l'indiquer à  dovecot en tapant

doveadm mount remove /power


Configuration d'un serveur IMAP

Le serveur IMAP stocke les mails sur le serveur contrairement au serveur POP où les mails se retrouvent stockés sur le poste client, l'avantage avec IMAP est donc de pouvoir consulter ses mails un peu partout dans la limite de l'accès bien sûr au serveur IMAP. Il est basé également sur dovecot, dans le fichier de configuration /etc/dovecot/dovecot.conf on modifiera la ligne suivante

protocols = imap pop3

sur une mageia, on trouvera un fichier /etc/doveconf/conf.d/10-mail.conf contenant

mail_location = maildir:~/Maildir:LAYOUT=fs

namespace inbox {
  inbox = yes
}

mail_privileged_group = mail

pour avoir une idée de la configuration de dovecot on tapera doveconf -n -P voilà le résultat

# 2.3.20 (80a5ac675d): /etc/dovecot/dovecot.conf
# OS: Linux 6.4.9-desktop-4.mga9 x86_64 Mageia 9
# Hostname: ultra.kervao.fr
listen = *
mail_location = maildir:~/Maildir:LAYOUT=fs
mail_privileged_group = mail
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
protocols = imap pop3
ssl = required
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
userdb {
  driver = passwd
}

il faudra abandonner le format MBOX au profit du format MAILDIR pour pouvoir bénéficier des sous dossiers dans son arborescence de mail, sinon on n'aura qu'un niveau de dossiers, c'est l'objet du paramètre mail_location. A noter que si le fichier 10-mail.conf n'existe pas, il suffit de rajouter la ligne dans le fichier doveconf.conf. On relancera dovecot

systemctl restart dovecot

Maintenant il faudra modifier un certain nombre de fichiers système pour bien prendre en compte cette évolution du format de la boîte mail. Tout d'abord le fichier /etc/login.defs

QMAIL_DIR    Maildir
#MAIL_DIR    /var/spool/mail
MAIL_DIR       Maildir/
#MAIL_FILE    .mail

le fichier /etc/profile

USER=`id -un`
LOGNAME=$USER
#MAIL="/var/spool/mail/$USER"
MAIL="/home/$USER/Maildir"
MAILDIR="~/Maildir"

et pour être averti de l'arrivée de mail, on modifiera également les paramètres d'authentification basée sur PAM. Dans /etc/pam.d/login et /etc/pam.d/su on rajoutera à la fin

session    optional   pam_mail.so dir=~/Maildir standard

Il sera sans doute nécessaire de rebooter le PC pour prendre en compte ces dernières modifications. Pour récupérer maintenant les mails qui sont sous /var/spool/mail on récupérera mb2md qu'on peut trouver ici https://github.com/mindbit/mb2md pour chaque utilisateur (ici olivier) on tapera la commande

mb2md -s /var/spool/mail/olivier  -d ~/Maildir/

et voilà le résultat

Converting /var/spool/mail/olivier to maildir: /home/olivier/Maildir
Source Mbox is /var/spool/mail/olivier
Target Maildir is /home/olivier/Maildir
Dummy mail system first message detected and not saved.
7 messages.

Maintenant sous thunderbird on pourra s'inspirer de cette page https://support.mozilla.org/en-US/kb/switch-pop-imap-account mais en gros il faudra créer un nouveau compte de messagerie en pointant dans le courrier entrant sur votre serveur IMAP

Sous thunderbird maintenant vous allez peupler votre compte IMAP en déplaçant vos dossiers de votre ancien compte POP vers le nouveau compte IMAP tout simplement par drag and drop.


Il est préférable maintenant de passer en connexion chiffrée avec STARTTLS, vu que SSL n'est plus recommandé, il n'y a rien à faire au niveau de la configuration de dovecot mais le port est différent.

Il faudra ensuite accepter l'exception de sécurité pour prendre en compte le certificat local. Les certificats sont visibles sous thunderbird au niveau de Éditions->Paramètres->Vie privée et sécurité et dans la page Sécurité->Certificats->Gérer les certificats. Dans la fenêtre Gestionnaire de certificats, le certificat utilisé apparaît au niveau de l'onglet Serveurs.

A noter qu'en cas d'expiration du certificat sur le serveur, il ne sera plus possible de se connecter. Dans ce cas il faudra supprimer le certificat obsolète via le Gestionnaire de certificats et normalement on devrait à nouveau avoir la fenêtre pour accepter l'exception de sécurité qui apparaît. Il se trouve que j'ai galéré une fois car cette fenêtre ne s'est pas affichée et j'avais comme message incessant sous thunderbird "vérification des capacités du serveur de courrier". Comme ça avait très bien marché pour un autre compte thunderbird j'y ai récupéré le fichier cert_override.txt qu'on retrouve sous .thunderbird/numéro-compte.default et qui contient les bonnes mentions de certificat.




webmail Roundcube mail

Installation

Dans le cas présent on installera roundcube mail qui se reposera sur le serveur IMAP. On récupérera la dernière release par ici https://github.com/roundcube/roundcubemail/releases on décompresse l'archive en tapant

tar xvfz roundcubemail-1.6.3.tar.gz

cela donne le répertoire roundcubemail-1.6.3 dans lequel il faut se déplacer. D'après les indications du site https://getcomposer.org/download/ on tapera les deux commandes suivantes

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

cela donne

Installer verified
All settings correct for using Composer
Downloading...

Composer (version 2.6.3) successfully installed to: /home/olivier/web/roundcubemail-1.6.3/composer.phar
Use it: php composer.phar

puis on tape

php composer-setup.php

cela donne

All settings correct for using Composer
Downloading...

Composer (version 2.6.3) successfully installed to: /home/olivier/web/roundcubemail-1.6.3/composer.phar
Use it: php composer.phar

puis

php -r "unlink('composer-setup.php');"

maintenant on tape

cp composer.json-dist composer.json

et

php composer.phar install --no-dev

voilà le résultat

No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Lock file operations: 51 installs, 0 updates, 0 removals
  - Locking bacon/bacon-qr-code (2.0.8)
  - Locking dasprid/enum (1.0.5)
  - Locking doctrine/instantiator (2.0.0)
  - Locking guzzlehttp/guzzle (7.8.0)
  - Locking guzzlehttp/promises (2.0.1)
  - Locking guzzlehttp/psr7 (2.6.1)
  - Locking masterminds/html5 (2.7.6)
  - Locking myclabs/deep-copy (1.11.1)
  - Locking nikic/php-parser (v4.17.1)
  - Locking pear/auth_sasl (v1.1.0)
  - Locking pear/console_commandline (v1.2.6)
  - Locking pear/console_getopt (v1.4.3)
  - Locking pear/crypt_gpg (v1.6.7)
  - Locking pear/mail_mime (1.10.11)
  - Locking pear/net_sieve (1.4.6)
  - Locking pear/net_smtp (1.10.1)
  - Locking pear/net_socket (v1.2.2)
  - Locking pear/pear-core-minimal (v1.10.13)
  - Locking pear/pear_exception (v1.0.2)
  - Locking phar-io/manifest (2.0.3)
  - Locking phar-io/version (3.2.1)
  - Locking phpunit/php-code-coverage (9.2.29)
  - Locking phpunit/php-file-iterator (3.0.6)
  - Locking phpunit/php-invoker (3.1.1)
  - Locking phpunit/php-text-template (2.0.4)
  - Locking phpunit/php-timer (5.0.3)
  - Locking phpunit/phpunit (9.6.13)
  - Locking psr/http-client (1.0.2)
  - Locking psr/http-factory (1.0.2)
  - Locking psr/http-message (2.0)
  - Locking ralouphie/getallheaders (3.0.3)
  - Locking roundcube/plugin-installer (0.3.2)
  - Locking roundcube/rtf-html-php (v2.1)
  - Locking sebastian/cli-parser (1.0.1)
  - Locking sebastian/code-unit (1.0.8)
  - Locking sebastian/code-unit-reverse-lookup (2.0.3)
  - Locking sebastian/comparator (4.0.8)
  - Locking sebastian/complexity (2.0.2)
  - Locking sebastian/diff (4.0.5)
  - Locking sebastian/environment (5.1.5)
  - Locking sebastian/exporter (4.0.5)
  - Locking sebastian/global-state (5.0.6)
  - Locking sebastian/lines-of-code (1.0.3)
  - Locking sebastian/object-enumerator (4.0.4)
  - Locking sebastian/object-reflector (2.0.4)
  - Locking sebastian/recursion-context (4.0.5)
  - Locking sebastian/resource-operations (3.0.3)
  - Locking sebastian/type (3.2.1)
  - Locking sebastian/version (3.0.2)
  - Locking symfony/deprecation-contracts (v3.3.0)
  - Locking theseer/tokenizer (1.2.1)
Writing lock file
Installing dependencies from lock file
Package operations: 23 installs, 0 updates, 0 removals
  - Downloading dasprid/enum (1.0.5)
  - Downloading bacon/bacon-qr-code (2.0.8)
  - Downloading symfony/deprecation-contracts (v3.3.0)
  - Downloading psr/http-message (2.0)
  - Downloading psr/http-client (1.0.2)
  - Downloading psr/http-factory (1.0.2)
  - Downloading guzzlehttp/psr7 (2.6.1)
  - Downloading guzzlehttp/promises (2.0.1)
  - Downloading guzzlehttp/guzzle (7.8.0)
  - Downloading masterminds/html5 (2.7.6)
  - Downloading pear/console_commandline (v1.2.6)
  - Downloading pear/pear-core-minimal (v1.10.13)
  - Downloading pear/net_sieve (1.4.6)
  - Downloading pear/net_smtp (1.10.1)
  - Installing roundcube/plugin-installer (0.3.2): Extracting archive
  - Installing dasprid/enum (1.0.5): Extracting archive
  - Installing bacon/bacon-qr-code (2.0.8): Extracting archive
  - Installing symfony/deprecation-contracts (v3.3.0): Extracting archive
  - Installing psr/http-message (2.0): Extracting archive
  - Installing psr/http-client (1.0.2): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing psr/http-factory (1.0.2): Extracting archive
  - Installing guzzlehttp/psr7 (2.6.1): Extracting archive
  - Installing guzzlehttp/promises (2.0.1): Extracting archive
  - Installing guzzlehttp/guzzle (7.8.0): Extracting archive
  - Installing masterminds/html5 (2.7.6): Extracting archive
  - Installing pear/pear_exception (v1.0.2): Extracting archive
  - Installing pear/auth_sasl (v1.1.0): Extracting archive
  - Installing pear/console_commandline (v1.2.6): Extracting archive
  - Installing pear/crypt_gpg (v1.6.7): Extracting archive
  - Installing pear/console_getopt (v1.4.3): Extracting archive
  - Installing pear/pear-core-minimal (v1.10.13): Extracting archive
  - Installing pear/mail_mime (1.10.11): Extracting archive
  - Installing pear/net_socket (v1.2.2): Extracting archive
  - Installing pear/net_sieve (1.4.6): Extracting archive
  - Installing pear/net_smtp (1.10.1): Extracting archive
  - Installing roundcube/rtf-html-php (v2.1): Extracting archive
11 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
4 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

Maintenant sous MySQL (ou phpMyAdmin) on créera la base de données roundcubemail

CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci;

on va donner les droits d'administration sur la base à un utilisateur particulier

GRANT ALL PRIVILEGES ON roundcubemail.* TO olivier@localhost IDENTIFIED BY 'passwd';

FLUSH PRIVILEGES 

Toujours dans le répertoire roundcubemail-1.6.3 on tapera

mariadb roundcubemail -u olivier -p < SQL/mysql.initial.sql

Maintenant j'ai déplacé roundcubemail dans un répertoire accessible par un serveur web apache  (à adapter à votre configuration)

 cp -Rf /home/olivier/web/roundcubemail-1.6.3 /var/httpd/roundcubemail

dans le fichier httpd.conf on rajoutera

<Directory "/var/httpd/roundcubemail">
   Options Indexes FollowSymLinks Includes ExecCGI
   AllowOverride All
   Require all granted
</Directory>

Alias /webmail "/var/httpd/roundcubemail"

Sinon on accède à la page de configuration en tapant dans votre navigateur http://votre-serveur-local/webmail/installer/. La première page vous indique si tout est correctement installé

La deuxième page permet d'indiquer des éléments de configuration, notamment les informations pour accéder à la base de données, au serveur IMAP et au serveur SMTP d'envoi de mails.

On télécharge et on installe manuellement ensuite le fichier de configuration qu'on place sous config

et la dernière page pour tester le tout


Le fichier de configuration se trouver sous /var/httpd/roundcubemail/config/config.inc.php, voilà quelques lignes intéressantes. L'accès à la base de données locale

$config['db_dsnw'] = 'mysql://olivier:mot-passe@localhost/roundcubemail';

le serveur de mail IMAP

$config['imap_host'] = 'serveur-imap';

il faudra ensuite supprimer le répertoire /var/httpd/roundcubemail/installer

On pensera à mettre les fichiers logs et temp à 777. Si vous rencontrez une erreur SMTP 535 dans le fichier config.inc.php il faudra rajouter

$config['smtp_user'] = '';

voilà, voilà, roundcubemail est prêt à être utilisé et voici ce que ça donne sur l'adresse de votre-serveur/webmail à partir d'un navigateur quelconque


En cas de problème, vous pouvez activer le mode debug en rajoutant les lignes suivantes dans le fichier config.inc.php

$config['debug_level'] = 1;

// Log SQL queries
$config['sql_debug'] = true;

// Log IMAP conversation
$config['imap_debug'] = true;

// Log LDAP conversation
$config['ldap_debug'] = true;

// Log SMTP conversation
$config['smtp_debug'] = true;

et maintenant si le thème par défaut elastic  est planté, ça peut arriver si la version de lessc est trop vieille (cas de la Mageia 8) il faudra installer le package npm en tant que root, puis tapez les commandes

npm install -g less

npm install -g less-plugin-clean-css

et dans le répertoire de roundcubemail/skins/elastic on tapera

lessc --clean-css="--s1 --advanced" styles/styles.less > styles/styles.min.css
lessc --clean-css="--s1 --advanced" styles/print.less > styles/print.min.css
lessc --clean-css="--s1 --advanced" styles/embed.less > styles/embed.min.css

[Retour haut de la page ]

Mise à jour

Pour les mises à jour on récupèrera la dernière version qu'on décompresse en tapant (à noter qu'il faut récupérer la version complète) :

tar xvfz roundcubemail-1.6.3-complete.tar.gz

cela donne le répertoire roundcubemail-1.6.3

dans lequel on tape alors

bin/installto.sh /var/httpd/roundcubemail

il remplace un certain nombre de fichiers et la fin peut ressembler à ça

WARNING: Replaced config options:
(These config options have been replaced or renamed)
- 'default_host' was replaced by 'imap_host'
- 'smtp_server' was replaced by 'smtp_host'
Do you want me to fix your local configuration? (y/N)
y
. backing up the current config file(s)...
. writing /var/httpd/roundcubemail/config/config.inc.php...
Done.
Your configuration files are now up-to-date!
Executing database schema update.
Updating database schema (2021081000)... [OK]
Updating database schema (2021100300)... [OK]
NOTICE: Update dependencies by running `php composer.phar update --no-dev`
This instance of Roundcube is up-to-date.
Have fun!
All done.

  - Upgrading pear/pear-core-minimal (v1.10.11 => v1.10.13): Extracting archive
  - Upgrading pear/net_sieve (1.4.5 => 1.4.6): Extracting archive
  - Upgrading pear/net_smtp (1.10.0 => 1.10.1): Extracting archive
  - Upgrading roundcube/larry (1.6.0 => 1.6.1): Extracting archive
  0/38 [>---------------------------]   0%
 16/38 [===========>----------------]  42%
 23/38 [================>-----------]  60%
 36/38 [==========================>-]  94%
 38/38 [============================] 100%
Generating autoload files
4 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
This instance of Roundcube is up-to-date.
Have fun!
All done.

on revient sous /var/httpd/roundcubemail on tape également

php composer.phar update --no-dev

c'est tout

Utilisation

Je ne vous ferai pas l'affront de vous expliquer comment ça fonctionne, c'est très simple et intuitif. Au besoin y a une doc un peu passée par ici https://docs.roundcube.net/doc/help/1.0/fr_FR/# OVH fournit également une documentation par là https://docs.ovh.com/fr/emails/utilisation-roundcube/

Rien de plus simple ensuite de rendre accessible votre serveur IMAP sur internet et vous avez accès ainsi à vos mails depuis votre mobile Android n'importe où dans le monde


Personnalisation

Personnalisation avec l'installation d'un agenda, on récupérera ce plugin par ici https://github.com/kolab-roundcube-plugins-mirror  on récupérera plus précisément  calendar-3.5.7.tar.gz, libkolab-3.5.7.tar.gz et libcalendaring-3.5.6.tar.gz qu'on va décompresser dans le répertoire roundcubemail sous plugins. On les renomme ensuite ainsi

mv calendar-3.5.7/ calendar

mv libkolab-3.5.7/ libkolab

mv libcalendaring-3.5.6/ libcalendaring

dans le répertoire calendar on va taper les commandes suivantes

mv config.inc.php.dist config.inc.php
cd ../..
bin/initdb.sh --dir=plugins/calendar/drivers/database/SQL

voilà le résultat de la dernière commande

Creating database schema... [OK]

il faudra maintenant en tant que root installer les packages suivants

urpmi ruby-less ruby-devel

et taper

gem install therubyracer

voilà le résultat

Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.3
Parsing documentation for therubyracer-0.12.3
Installing ri documentation for therubyracer-0.12.3
Done installing documentation for therubyracer after 0 seconds
1 gem installed

on tape alors

lessc  --clean-css="--s1 --advanced" plugins/libkolab/skins/elastic/libkolab.less > plugins/libkolab/skins/elastic/libkolab.min.css
lessc  --clean-css="--s1 --advanced" plugins/libkolab/skins/larry/libkolab.less > plugins/libkolab/skins/larry/libkolab.min.css

on édite enfin config/config.inc.php et on rajoute le plugin calendar dans la liste des extensions

// ----------------------------------
// PLUGINS
// ----------------------------------

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'calendar'
];

et voilà une icône calendrier fait son apparition

et voilà ce que ça donne pour les préférences de l'agenda


et sur le mobile ça donnera quelque chose comme cela


Il peut y avoir un petit effet collatéral avec l'affichage du message d'erreur Oops... something went wrong ! An internal error occured avec dans le fichier de log sous /var/httpd/roundcubemail/logs

[07-Nov-2020 14:11:49 UTC] PHP Fatal error:  Uncaught Error: Class 'Sabre\VObject\Property\Text' not found in /home/olivier/web/roundcubemail-1.4.9/plugins/libcalendaring/libvcalendar.php:1451

Dans ce cas on se place sous /var/httpd/roundcubemail et il faudra taper les commandes indiquées sous https://getcomposer.org/download/

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

puis on tape

php composer.phar require sabre/vobject ~4.1
php composer.phar update sabre/dav

C'est réglé !

Sinon si lors de l'envoi d'une pièce jointe vous avez une erreur, qu'on retrouve dans les fichiers de log d'Apache

PHP Warning:  File upload error - unable to create a temporary file in Unknown on line 0, referer: http://mana.kervao.fr/webmail/?_task=mail&_action=compose&_id=712385658622afc04ae31c

il faudra éditer le fichier php.ini et faire en sorte que la variable suivante soit bien définie

upload_tmp_dir = "/tmp"

[03-Aug-2022 07:39:21 +0000]: <10saa31s> PHP Error: Request security check failed (GET /webmail/?_task=logout)

dans roundcubemail

php bin/install-jsdeps.sh

 
[Retour page d'accueil FUNIX]