« LINUX:Auto-configuration du client de messagerie » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
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, est adaptée dans la réponse.
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.



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