wiki/HowtoMail/Autoconfig.md
2022-12-05 14:37:42 +01:00

6.9 KiB

RFC6186 + RFC8314

La méthode d'autoconfiguration des clients de courriel la plus répandue est définie dans la RFC6186 et la RFC8314 qui rajoute le support du TLS à la première.

Thunderbird

La méthode d'auto-configuration de Thunderbird est aussi supporté par d'autres clients mail comme Evolution ou KMail, ....

L'auto-configuration se fait à partir de fichier de configuration local au client, à partir de la base de donnée hébergé sur les serveurs de Mozilla, mais il est aussi possible de définir cette auto-configuration par nous même. Pour ces ressources distances (qui ne dépendent pas de Mozilla) ça se fait dans cet ordre-là :

  1. http://autoconfig.emailaddressdomain/mail/config-v1.1.xml?emailaddress=alice@example.com, qui retourne un fichier de config comme décrit ci-dessous
  2. http://example.com/.well-known/autoconfig/mail/config-v1.1.xml, même fichier attendu que pour le point n°1
  3. Devine la configuration en essayant les ports communs ainsi que le support SSL pour les domaines : imap.domain, pop.domain, pop3.domain, smtp.domain and mail.domain

Pour générer un fichier d'autoconfiguration au format ConfigFileFormat pour Thunderbird :

hostname=mail00.example.com
imap_server=imap.example.com
imap_port=993
smtp_server=smtp.example.com
smtp_port=587

cat <<EOF
<?xml version="1.0"?>
<clientConfig version="1.1">
    <emailProvider id="mail02.evolix.net">
      <domain>${hostname}</domain>
      <displayName>Service de messagerie électronique ${hostname}</displayName>
      <displayShortName>${hostname}</displayShortName>
      <incomingServer type="imap">
         <hostname>${imap_server}</hostname>
         <port>${imap_port}</port>
         <socketType>SSL</socketType>
         <authentication>password-cleartext</authentication>
         <username>%EMAILADDRESS%</username>
      </incomingServer>
      <outgoingServer type="smtp">
         <hostname>${smtp_server}</hostname>
         <port>${smtp_port}</port>
         <socketType>SSL</socketType>
         <username>%EMAILADDRESS%</username>
         <authentication>password-cleartext</authentication>
      </outgoingServer>
    </emailProvider>
</clientConfig>
EOF

Malheuresement, Mozilla Thunderbird est le principal client mail qui ne supporte pas (encore ? ) la RFC6186, on ne peut donc pas mettre en place de l'autoconfiguration juste en changeant des entrées DNS.

Outlook (Autodiscover)

Depuis au moins 2016, Outlook supporte la RFC6186, ce qui pratique quand on veux configurer l'autconfiguration des clients de courriels exclusivement par DNS.

La documentation du fonctionnement d'Autodiscover ainsi que la description du format de configuration est documenté par Microsoft ici et .

Pour générer un fichier d'autoconfiguration pour Outlook :

imap_server=imap.example.com
imap_port=993
smtp_server=smtp.example.com
smtp_port=587

cat <<EOF
<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>${imap_server}</Server>
        <Port>${imap_port}</Port>
        <DomainRequired>on</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
      </Protocol>
      <Protocol>
        <Type>SMTP</Type>
        <Server>${smtp_server}</Server>
        <Port>${smtp_port}</Port>
        <DomainRequired>on</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
      </Protocol>
    </Account>
  </Response>
</Autodiscover>
EOF

Apple

Pour générer un fichier d'autoconfiguration pour les clients mails d'Apple :

hostname=mail00.example.com
hostname_reverse=$(echo "$hostname" | tr . '\n' | tac | tr '\n' . | sed 's/.$//')
imap_server=imap.example.com
imap_port=993
smtp_server=smtp.example.com
smtp_port=587

cat <<EOF
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>EmailAccountType</key>
            <string>EmailTypeIMAP</string>
            <key>IncomingMailServerAuthentication</key>
            <string>EmailAuthPassword</string>
            <key>IncomingMailServerHostName</key>
            <string>${imap_server}</string>
            <key>IncomingMailServerPortNumber</key>
            <integer>${imap_port}</integer>
            <key>IncomingMailServerUseSSL</key>
            <true/>

            <key>OutgoingMailServerAuthentication</key>
            <string>EmailAuthPassword</string>
            <key>OutgoingMailServerHostName</key>
            <string>${smtp_server}</string>
            <key>OutgoingMailServerPortNumber</key>
            <integer>${smtp_port}</integer>
            <key>OutgoingMailServerUseSSL</key>
            <true/>
            <key>OutgoingPasswordSameAsIncomingPassword</key>
            <true/>

            <key>PayloadDisplayName</key>
            <string>Email autoconfiguration profile</string>
            <key>PayloadIdentifier</key>
            <string>${hostname_reverse}</string>
            <key>PayloadType</key>
            <string>com.apple.mail.managed</string>
            <key>PayloadUUID</key>
            <string>$(uuidgen)</string>
            <key>PayloadVersion</key>
            <real>1</real>
            <key>SMIMEEnablePerMessageSwitch</key>
            <false/>
            <key>SMIMEEnabled</key>
            <false/>
            <key>disableMailRecentsSyncing</key>
            <false/>
        </dict>
    </array>
    <key>PayloadDisplayName</key>
    <string>Email autoconfiguration</string>
    <key>PayloadIdentifier</key>
    <string>${hostname_reverse}</string>
    <key>PayloadRemovalDisallowed</key>
    <false/>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>$(uuidgen)</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
</dict>
</plist>
EOF