« LINUX:Auto-configuration du client de messagerie » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (6 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 56 : | Ligne 56 : | ||
On commence par aborder le protocole HTTP (port 80). On va y intégrer nos | On commence par aborder le protocole HTTP (port 80). On va y intégrer nos deux machines virtuelles: "home.dom" et "autoconfig.home.dom". | ||
On ajoute dans la configuration d'Apache se trouvant sous le répertoire "/etc/httpd" les ligne suivantes: | On ajoute dans la configuration d'Apache se trouvant sous le répertoire "/etc/httpd" les ligne suivantes: | ||
| Ligne 75 : | Ligne 75 : | ||
On passe ensuite à l'ajout de la configuration du protocole HTTPS (port 443). | On passe ensuite à l'ajout de la configuration du protocole HTTPS (port 443) pour ces deux mêmes machines virtuelles. | ||
On ajoute dans la configuration d'Apache se trouvant sous le répertoire "/etc/httpd" les ligne suivantes: | On ajoute dans la configuration d'Apache se trouvant sous le répertoire "/etc/httpd" les ligne suivantes: | ||
| Ligne 125 : | Ligne 125 : | ||
* /web/autoconfig/mail | * /web/autoconfig/mail | ||
* /web/autoconfig/.well-known/mail | * /web/autoconfig/.well-known/mail | ||
* /web/autoconfig | * /web/autoconfig/autodiscover | ||
| Ligne 164 : | Ligne 164 : | ||
<socketType>STARTTLS</socketType> | <socketType>STARTTLS</socketType> | ||
<authentication>password-cleartext</authentication> | <authentication>password-cleartext</authentication> | ||
<username>%EMAILLOCALPART%</username> | <username>%EMAILLOCALPART%</username>autoconfig.home.dom | ||
</outgoingServer> | </outgoingServer> | ||
</emailProvider> | </emailProvider> | ||
| Ligne 186 : | Ligne 186 : | ||
* %EMAILADDRESS% pour l'adresse mail | * %EMAILADDRESS% pour l'adresse mail | ||
* %EMAILLOCALPART% pour l'utilisateur | * %EMAILLOCALPART% pour l'utilisateur | ||
Selon le format, l'adresse mail fournie en argument lors de la requête HTTPS, sera adaptée par Thunderbird. | |||
Nous utilisons le second format. | Nous utilisons le second format. | ||
La requête envoyée est la suivante accompagnée d'un argument par exemple, pour l'adresse mail "pdupont@hom.dom": | |||
GET /mail/config-v1.1.xml?emailaddress=pdupont%40home.dom | |||
vers le serveur "autoconfig.home.dom" | |||
et | |||
GET /.well-known/autoconfig/mail/config-v1.1.xml?emailaddress=pdupont%40home.dom | |||
vers le serveur "home.dom". | |||
Pour une description complète de ce fichier XML, reportez-vous à l'URL https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat | Pour une description complète de ce fichier XML, reportez-vous à l'URL https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat | ||
| Ligne 194 : | Ligne 203 : | ||
=Fichier XML pour Microsoft Office Outlook= | =Fichier XML pour Microsoft Office Outlook= | ||
Dans le répertoire: | |||
* /web/autoconfig/autodiscover | |||
, on devrait trouver le fichier "autodiscover.xml". | |||
Mais le nom d'utilisateur ne peux être adapté automatiquement comme pour les requêtes du point précédent. | |||
Il faut donc contourner cette restriction par un script PHP qui va remplir le nom d'utilisateur vide à la base par celui fournit. Il renvoie le contenu XML. | |||
Voici le contenu de ce script que l'on nommera "autodiscover.php": | |||
---- | |||
<?php | |||
//get raw POST data so we can extract the email address | |||
$data = file_get_contents("php://input"); | |||
preg_match("/\<EMailAddress\>(.*?)\<\/EMailAddress\>/", $data, $matches); | |||
| |||
//Choisir entre les deux en fonction du cas | |||
//------------------------------------------------ | |||
// extraire l'utilisateur | |||
// $matches[1] contient l'adresse mail | |||
$email=explode("@",$matches[1]); | |||
'''$user'''=$email[0]; | |||
//------------------------------------------------ | |||
// extraire l'adresse mail | |||
//'''$user'''=$matches[1]; | |||
//------------------------------------------------ | |||
// nom du serveur mail | |||
'''$host'''="mail.home.dom"; | |||
//------------------------------------------------ | |||
| |||
//set Content-Type | |||
header("Content-Type: application/xml"); | |||
echo '<?xml version="1.0" encoding="utf-8" ?>'; ?> | |||
| |||
<Autodiscover xmlns="<nowiki>http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006</nowiki>"> | |||
<Response xmlns="<nowiki>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</nowiki>"> | |||
<Account> | |||
<AccountType>email</AccountType> | |||
<Action>settings</Action> | |||
<Protocol> | |||
<Type>IMAP</Type> | |||
<Server><?php echo $host; ?></Server> | |||
<Port>993</Port> | |||
<DomainRequired>off</DomainRequired> | |||
<LoginName><?php echo $user; ?></LoginName> | |||
<SPA>off</SPA> | |||
<SSL>on</SSL> | |||
<AuthRequired>on</AuthRequired> | |||
</Protocol> | |||
<Protocol> | |||
<Type>POP3</Type> | |||
<Server><?php echo $host; ?></Server> | |||
<Port>995</Port> | |||
<DomainRequired>off</DomainRequired> | |||
<LoginName><?php echo $user; ?></LoginName> | |||
<SPA>off</SPA> | |||
<SSL>on</SSL> | |||
<AuthRequired>on</AuthRequired> | |||
</Protocol> | |||
<Protocol> | |||
<Type>SMTP</Type> | |||
<Server><?php echo $host; ?></Server> | |||
<Port>587</Port> | |||
<DomainRequired>off</DomainRequired> | |||
<LoginName><?php echo $user; ?></LoginName> | |||
<SPA>off</SPA> | |||
<Encryption>TLS</Encryption> | |||
<AuthRequired>on</AuthRequired> | |||
<UsePOPAuth>off</UsePOPAuth> | |||
<SMTPLast>off</SMTPLast> | |||
</Protocol> | |||
</Account> | |||
</Response> | |||
</Autodiscover> | |||
---- | |||
La sortie est équivalente avec le cas précédent. | |||
Le script est adapté pour retourner le nom d'utilisateur (variable "$user"). | |||
Si on veut l'adresse mail, on commente la partie du premier $user et on décommente la seconde. | |||
La variable "$host" contient le nom du serveur de messagerie. | |||
Mais comme la requête mentionne un fichier ".xml" et non un fichier ".php", il faut trouver une astuce pour rediriger cette requête de XML vers PHP. | |||
La solution réside en l'utilisation du fichier ".htaccess" à placer dans ce même répertoire. Voici son contenu: | |||
---- | |||
RewriteEngine On | |||
RewriteCond %{REQUEST_FILENAME} -s | |||
RewriteRule ^autodiscover.xml$ - [NC,L] | |||
RewriteRule ^autodiscover.xml$ autodiscover.php [NC,L] | |||
---- | |||
Il réécrit la partie fichier de la requête. | |||
La requête envoyée est la suivante pour l'adresse mail "pdupont@hom.dom": | |||
POST /autodiscover/autodiscover.xml | |||
est réécrit en: | |||
POST /autodiscover/autodiscover.php | |||
qui envoie en parallèle le contenu suivant: | |||
---- | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Autodiscover xmlns="<nowiki>http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006</nowiki>"> | |||
<Request><EMailAddress>'''pdupont@home.dom'''</EMailAddress> | |||
<AcceptableResponseSchema><nowiki>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</nowiki></AcceptableResponseSchema> | |||
</Request></Autodiscover> | |||
---- | |||
Le script PHP en extrait l'adresse mail ou le nom d'utilisateur afin de compléter la sortie XML. | |||
Dernière version du 20 octobre 2025 à 16:12
→ retour au menu de concernant la messagerie
But
Lors de l'initialisation d'un compte mail dans client de messagerie tels Mozilla Thunderbird ou Microsoft Office Outlook, il n'est pas facile de configurer les différents paramètres permettant d'assurer les connexions avec le serveur de messagerie. La mise en place de l'auto-configuration permet d'automatiser cette tâche.
Dans les exemples qui suivent, nous utiliserons le nom de domaine "home.dom" de notre réseau local. Mais pour un domaine référencé au niveau mondial dans un serveur DNS, le principe est équivalent. Notre serveur de messagerie sera "mail.home.dom".
Principe
Au niveau du client de messagerie, on fournit l'adresse mail et le mot de passe associé et le serveur du domaine concerné fournit le reste du paramétrage.
Le client de messagerie va interroger le serveur WEB du domaine correspondant. Ce serveur détient un fichier de configuration sous format XML qui est renvoyé au client qui remplit le reste des paramètres.
Il existe différents noms de fichiers XML ayant une structure spécifique en fonction du client de messagerie. Ils sont placés à des endroits spécifiques dans des sites WEB.
- Pour Microsoft Office Outlook, le chemin est sous la forme:
- http://<nom de domaine>/autodiscover/autodiscover.xml Selon notre exemple: https://home.dom/autodiscover/autodiscover.xml
- Pour Mozilla Thunderbird, le chemin peut se présenter sous trois formes:
- http://<nom de domaine>/.well-known/autoconfig/mail/config-v1.1.xml Par exemple: https://home.dom/.well-known/autoconfig/mail/config-v1.1.xml
- http://autoconfig.<nom de domaine>/mail/config-v1.1.xml Par exemple: https://autoconfig.home.dom/mail/config-v1.1.xml
- http://<nom de domaine>/autodiscover/autodiscover.xml Par exemple: https://home.dom/autodiscover/autodiscover.xml
Certificats
Comme il se doit actuellement, nous utiliserons un échange sécurisé. Toute requête de type HTTP sera automatiquement redirigée vers un type HTTPS.
Il faut donc disposer de certificats adaptés. Reportez-vous à l'article sur l'Extension de la CA privée (V3).
Bien sûr, si votre serveur est accessible via Internet, on passe d'office aux certificats créés par Let's Encrypt (certificats gratuits SSL/TLS).
Reconnaissance de notre serveur auprès du client
Notre serveur doit être reconnu par notre machine client à partir de laquelle nous désirons consulter nos mails.
Si notre serveur n'est accessible que sur notre réseau local, soit nous disposons d'un serveur DNS local, soit il faut adapter le fichier "hosts" sur notre machine client.
- Sous Windows, ce fichier se trouve à l'adresse suivante: "c:\windows\system32\drivers\etc\hosts"
- Sous Linux, ce fichier se trouve à l'adresse suivante: "/etc/hosts"
Pour notre exemple, nous amendons le fichier "hosts" qui doit contenir (ou amendée) la ligne suivante:
192.168.1.100 home.dom autoconfig.home.dom mail.home.dom
Voyez l'article sur Le fichier HOSTS pour plus d'informations.
Si par contre, votre serveur est accessible via Internet, on ajoute ces entrées dans le gestionnaire de votre zone DNS tel OVH.
Voyez les articles tels la Configuration du serveur DNS via GSLB ou la Configuration du serveur DNS via OVH.
Serveur WEB : Apache
L'étape suivante consiste à configurer notre serveur WEB. Nous utilisons Apache.
A noter que pour la suite, nous utiliserons un script PHP; il faut que ce module soit ajouté et actif dans notre serveur WEB. Voyez l'article sur PHP. Le module SSL ("mod_ssl") doit aussi être installé. Voyez l'article sur HTTP: serveur Web.
On commence par aborder le protocole HTTP (port 80). On va y intégrer nos deux machines virtuelles: "home.dom" et "autoconfig.home.dom".
On ajoute dans la configuration d'Apache se trouvant sous le répertoire "/etc/httpd" les ligne suivantes: ---
<VirtualHost *:80>
ServerName home.dom
RewriteEngine on
RewriteRule ^ https://home.dom%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
ServerName autoconfig.home.dom
RewriteEngine on
RewriteRule ^ https://autoconfig.home.dom%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
On remarque que l'on fait appel au module de réécriture de la requête qui nous redirige vers le protocole HTTPS (port 443).
On passe ensuite à l'ajout de la configuration du protocole HTTPS (port 443) pour ces deux mêmes machines virtuelles.
On ajoute dans la configuration d'Apache se trouvant sous le répertoire "/etc/httpd" les ligne suivantes: ---
<VirtualHost *:443> ServerName home.dom SSLEngine on SSLOptions +StrictRequire SSLCertificateKeyFile /etc/pki/home/private/home.key SSLCertificateFile /etc/pki/home/certs/home.pem DocumentRoot /web/autoconfig <Directory /web/autoconfig> Options +FollowSymLinks -Indexes AllowOverride All Include conf.d/php8.cfg </Directory> </VirtualHost> <VirtualHost *:443> ServerName autoconfig.home.dom SSLEngine on SSLOptions +StrictRequire SSLCertificateKeyFile /etc/pki/home/private/home.key SSLCertificateFile /etc/pki/home/certs/home.pem DocumentRoot /web/autoconfig <Directory /web/autoconfig> Options +FollowSymLinks -Indexes AllowOverride All </Directory> </VirtualHost>
On y remarque:
- l'activation du protocole SSL
- l'ajout des certificats
- l'ajout des paramètres pour le répertoire qui accueillera nos fichiers XML de l'auto-configuration mail.
- l'activation de PHP (note: Pour la seconde entrée, il peut être évité.)
Pour que cette nouvelle configuration, on doit redémarrer notre serveur WEB:
systemctl restat httpd
Arborescence
Au point précédent, on fait appel au répertoire "/web/autoconfig". Il s'agit de le créer. Il faut donner à l'utilisateur "apache" les droits de lecture/exécution sur ce répertoire et ceux qui seront créés en dessous et les droits de lecture sur les fichiers qui y seront logés.
On crée ensuite les sous-dossiers cités plus haut:
- /web/autoconfig/mail
- /web/autoconfig/.well-known/mail
- /web/autoconfig/autodiscover
Fichier XML pour Mozilla Thunderbird
Dans les répertoires:
- /web/autoconfig/mail
- /web/autoconfig/.well-known/mail
, on crée le fichier "config-v1.1.xml".
Voici son contenu:
<clientConfig version="1.1">
<emailProvider id="home.dom">
<domain>home.dom</domain>
<displayName>Home Mail</displayName>
<displayShortName>Home</displayShortName>
<incomingServer type="imap">
<hostname>mail.home.dom</hostname>
<port>993</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILLOCALPART%</username>
</incomingServer>
<incomingServer type="pop3">
<hostname>mail.home.dom</hostname>
<port>995</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILLOCALPART%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.home.dom</hostname>
<port>587</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILLOCALPART%</username>autoconfig.home.dom
</outgoingServer>
</emailProvider>
</clientConfig>
Nous avons opté pour une configuration classique, utilisée dans nos articles sur Postfix et Dovecot.
On y remarque trois blocs pour les protocoles:
- IMAPS (port 993 - protocole SSL)
- POP3S (port 995 - protocole SSL)
- Submission (port 587 - protocole STARTTLS)
Le mot de passe passe en clair.
Le serveur de messagerie est "mail.home.dom".
L'utilisateur pour l'authentification auprès du serveur de messagerie peut se présenter sous deux formes:
- adresse mail, par exemple "pdupont@home.dom"
- utilisateur, par exemple "pdupond"
La balise "username" doit être adaptée en fonction:
- %EMAILADDRESS% pour l'adresse mail
- %EMAILLOCALPART% pour l'utilisateur
Selon le format, l'adresse mail fournie en argument lors de la requête HTTPS, sera adaptée par Thunderbird. Nous utilisons le second format.
La requête envoyée est la suivante accompagnée d'un argument par exemple, pour l'adresse mail "pdupont@hom.dom":
GET /mail/config-v1.1.xml?emailaddress=pdupont%40home.dom
vers le serveur "autoconfig.home.dom" et
GET /.well-known/autoconfig/mail/config-v1.1.xml?emailaddress=pdupont%40home.dom
vers le serveur "home.dom".
Pour une description complète de ce fichier XML, reportez-vous à l'URL https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat
Cet exemple est a adapter selon vos besoins.
Fichier XML pour Microsoft Office Outlook
Dans le répertoire:
- /web/autoconfig/autodiscover
, on devrait trouver le fichier "autodiscover.xml".
Mais le nom d'utilisateur ne peux être adapté automatiquement comme pour les requêtes du point précédent.
Il faut donc contourner cette restriction par un script PHP qui va remplir le nom d'utilisateur vide à la base par celui fournit. Il renvoie le contenu XML.
Voici le contenu de ce script que l'on nommera "autodiscover.php":
<?php
//get raw POST data so we can extract the email address
$data = file_get_contents("php://input");
preg_match("/\<EMailAddress\>(.*?)\<\/EMailAddress\>/", $data, $matches);
//Choisir entre les deux en fonction du cas
//------------------------------------------------
// extraire l'utilisateur
// $matches[1] contient l'adresse mail
$email=explode("@",$matches[1]);
$user=$email[0];
//------------------------------------------------
// extraire l'adresse mail
//$user=$matches[1];
//------------------------------------------------
// nom du serveur mail
$host="mail.home.dom";
//------------------------------------------------
//set Content-Type
header("Content-Type: application/xml");
echo '<?xml version="1.0" encoding="utf-8" ?>'; ?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server><?php echo $host; ?></Server>
<Port>993</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $user; ?></LoginName>
<SPA>off</SPA>
<SSL>on</SSL>
<AuthRequired>on</AuthRequired>
</Protocol>
<Protocol>
<Type>POP3</Type>
<Server><?php echo $host; ?></Server>
<Port>995</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $user; ?></LoginName>
<SPA>off</SPA>
<SSL>on</SSL>
<AuthRequired>on</AuthRequired>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server><?php echo $host; ?></Server>
<Port>587</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $user; ?></LoginName>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<UsePOPAuth>off</UsePOPAuth>
<SMTPLast>off</SMTPLast>
</Protocol>
</Account>
</Response>
</Autodiscover>
La sortie est équivalente avec le cas précédent.
Le script est adapté pour retourner le nom d'utilisateur (variable "$user"). Si on veut l'adresse mail, on commente la partie du premier $user et on décommente la seconde.
La variable "$host" contient le nom du serveur de messagerie.
Mais comme la requête mentionne un fichier ".xml" et non un fichier ".php", il faut trouver une astuce pour rediriger cette requête de XML vers PHP.
La solution réside en l'utilisation du fichier ".htaccess" à placer dans ce même répertoire. Voici son contenu:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^autodiscover.xml$ - [NC,L]
RewriteRule ^autodiscover.xml$ autodiscover.php [NC,L]
Il réécrit la partie fichier de la requête.
La requête envoyée est la suivante pour l'adresse mail "pdupont@hom.dom":
POST /autodiscover/autodiscover.xml
est réécrit en:
POST /autodiscover/autodiscover.php
qui envoie en parallèle le contenu suivant:
<?xml version="1.0" encoding="utf-8"?> <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"> <Request><EMailAddress>pdupont@home.dom</EMailAddress> <AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema> </Request></Autodiscover>
Le script PHP en extrait l'adresse mail ou le nom d'utilisateur afin de compléter la sortie XML.
→ retour au menu de concernant la messagerie