Thunderbird et Outlook représente une grosse part de marché dans les clients de messagerie. Je m’occupe de plusieurs service de messagerie (pro, asso…) et il est bien commode pour les usagés que « ça tombe en marche » tout seul pour le paramétrage…
A savoir :
- Thunderbird chercher les paramètres dans un XML sur http://autoconfig.votredomain.fr/mail/config-v1.1.xml
- Outlook cherche l’enregistrement DNS _autodiscover._tcp.votredomain.fr l’url à contacter et ensuite récupère le XML : https://url_donner_dans_le_dns/Autodiscover/Autodiscover.xml
Du coup nous allons rassemblé ces 2 demandes avec un htaccess et un script PHP qui génère le bon format XML fonction de si c’est outlook our thunderbird qui demande…
Pour cela il faut :
- Créer un site « autoconfig.votredomain.fr » (ou un alias si vous avez plusieurs site) et faire pointer l’enregistrement DNS bien sûr…
- Créer l’enregistrement DNS SRV type :
- _autodiscover._tcp.votredomain.fr. 3600 IN SRV 10 10 443 autoconfig.votredomain.fr.
Dans le site autoconfig.votredomain.fr il vous suffit de glisser 2 fichiers à la racine :
Fichier .htaccess contient :
RewriteEngine On
RewriteRule ^Autodiscover/Autodiscover.xml autoconfig-mail.php
RewriteRule ^mail/config-v1.1.xml autoconfig-mail.php
Fichier autoconfig-mail.php contient :
<?php
/*
By David Mercereau
Licence Beerware
*/
function extract_domain($domain) {
if(preg_match("/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i", $domain, $matches)) {
return $matches['domain'];
} else {
return $domain;
}
}
$domain = extract_domain($_SERVER['SERVER_NAME']);
$mailServeur='mail.'.$domain;
if (preg_match('/^\/mail\/config-v1\.1\.xml/', $_SERVER['REQUEST_URI'])) {
header('Content-Type: text/xml');
header('Content-Type: application/xml');
?>
<clientConfig version="1.1">
<emailProvider id="<?= $domain ?>">
<domain><?= $domain ?></domain>
<displayName><?= $domain ?></displayName>
<displayShortName><?= $domain ?></displayShortName>
<incomingServer type="imap">
<hostname><?= $mailServeur ?></hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</incomingServer>
<outgoingServer type="smtp">
<hostname><?= $mailServeur ?></hostname>
<port>587</port>
<socketType>STARTTLS</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</outgoingServer>
<documentation url="https://webmail.<?= $domain ?>">
<descr lang="fr">Connexion Webmail</descr>
<descr lang="en">Webmail connexion</descr>
</documentation>
<documentation url="http://projet.retzo.net/projects/hebergement/wiki">
<descr lang="fr">Documentation</descr>
<descr lang="en">Generic settings page</descr>
</documentation>
</emailProvider>
</clientConfig>
<?php
} else {
// Outlook
//get raw POST data so we can extract the email address
$data = file_get_contents("php://input");
preg_match("/\<EMailAddress\>(.*?)\<\/EMailAddress\>/", $data, $matches);
//set Content-Type
header('Content-Type: text/xml');
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><?= $mailServeur ?></Server>
<Port>993</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $matches[1]; ?></LoginName>
<SPA>off</SPA>
<SSL>on</SSL>
<AuthRequired>on</AuthRequired>
</Protocol>
<Protocol>
<Type>POP3</Type>
<Server><?= $mailServeur ?></Server>
<Port>995</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $matches[1]; ?></LoginName>
<SPA>off</SPA>
<SSL>on</SSL>
<AuthRequired>on</AuthRequired>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server><?= $mailServeur ?></Server>
<Port>587</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $matches[1]; ?></LoginName>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<UsePOPAuth>off</UsePOPAuth>
<SMTPLast>off</SMTPLast>
</Protocol>
</Account>
</Response>
</Autodiscover>
<?php
}
?>
Des ressources :
- Autre projet similaire : https://github.com/cfoellmann/ISPC-resources/tree/master/guides/autodiscover
- Générateur : https://help.directadmin.com/item.php?id=661
- Pour tester sur outlook : https://testconnectivity.microsoft.com
- https://www.howto-outlook.com/howto/autodiscoverconfiguration.htm#cname
- https://www.awsmonster.com/2019/09/how-to-configure-autodiscover.html
- https://github.com/gronke/email-autodiscover
- https://github.com/SpicyWeb-de/isp-mailConfig
Attention dans votre script vous avez laissez une URL vers votre RedMine
Et celui-ci est disponible sur Internet sans authentification.
Ce qui nous permet de voir du contenu « privé »
Cordialement,
Bonjour Nightcrow,
Le contenu qui est ouvert sans authentification n’est pas du contenu privé mais public. Mais merci pour ta vigilance.
David