Тематические термины: SMTP, POP, IMAP, DNS, XML, NGINX.
Разберем процесс создания инфраструктуры для автоматической настройки почтовых клиентов. Для корректной работы Autodiscover нужен комплексный подход, так как у разных почтовых клиентов свои требования.
Для автоматической настройки почтового клиента, идет https POST-запрос к документу autodiscover.xml. При этом, Outlook сначала попробует найти сервер по записи в DNS autodiscover.server.domain, затем к просто к домену server.domain и затем — к SRV-записи _autodiscover._tcp.server.domain. Таким образом, необходимо настроить DNS и веб-сервер.
С DNS все просто — создаем А- (или CNAME-) и SRV-записи. Пример таких записей в bind:
autodiscover IN A 111.111.111.111
* где 111.111.111.111 — IP-адрес на наш веб-сервер, который будет возвращать документ XML.
_autodiscover._tcp IN SRV 0 0 443 autodiscover.admins24.com.
* где autodiscover.admins24.com — наша запись autodiscover в домене admins24.com.
В качестве примера, настройку выполним на веб-сервере NGINX, который работает на Linux. Если он не установлен, выполняем инсталляцию.
а) если сервер под CentOS / Red Hat:
yum install epel-release
yum install nginx
б) если сервер под Debian / Ubuntu:
apt-get install nginx
После разрешаем автозапуск и стартуем сервис:
systemctl enable nginx
systemctl start nginx
Затем создаем виртуальный домен:
vi /etc/nginx/conf.d/autodiscover.conf
server { listen 443; server_name autodiscover.admins24.com; root /usr/share/nginx/html/autodiscover;
ssl on; ssl_certificate /etc/letsencrypt/live/admins24.com/cert.pem; ssl_certificate_key /etc/letsencrypt/live/admins24.com/privkey.pem;
error_page 405 =200 $uri;}
* данная настройка позволит нашему серверу nginx принимать запросы на 443 порту (https); в качестве домашней директории мы будем использовать каталог /usr/share/nginx/html/autodiscover, куда и поместим нужный нам XML; /etc/letsencrypt/live/admins24.com/cert.pem и /etc/letsencrypt/live/admins24.com/privkey.pem — пути до сертификатов (в данном примере я использовал сертификаты от Let’s encrypt — чтобы их получить, читайте статью Получение бесплатного SSL сертификата Let’s Encrypt). Так как NGINX запрещает POST-запросы к статическим файлам, возвращая ошибку 405, мы будем ее игнорировать, заменяя кодом 200.
Проверяем корректность настройки:
Если ошибок нет, перечитываем конфиг:
systemctl reload nginx
Создаем каталог, в котором будет наш XML:
mkdir -p /usr/share/nginx/html/autodiscover/autodiscover
Создадим сам XML:
vi /usr/share/nginx/html/autodiscover/autodiscover/autodiscover.xml
<?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»> <User> <DisplayName>admins24.com</DisplayName> </User> <Account> <AccountType>email</AccountType> <Action>settings</Action> <Protocol> <Type>IMAP</Type> <Server>imap.admins24.com</Server> <Port>993</Port> <LoginName>[email protected]</LoginName> <AuthRequired>on</AuthRequired> <DomainRequired>on</DomainRequired> <SPA>on</SPA> <SSL>on</SSL> <Encryption>SSL</Encryption> </Protocol> <Protocol> <Type>POP</Type> <Server>pop.admins24.com</Server> <Port>995</Port> <LoginName>[email protected]</LoginName> <AuthRequired>on</AuthRequired> <DomainRequired>on</DomainRequired> <SPA>on</SPA> <SSL>on</SSL> <Encryption>SSL</Encryption> </Protocol> <Protocol> <Type>SMTP</Type> <Server>smtp.admins24.com</Server> <Port>587</Port> <LoginName>[email protected]</LoginName> <AuthRequired>on</AuthRequired> <DomainRequired>on</DomainRequired> <SPA>on</SPA> <SSL>on</SSL> <Encryption>TLS</Encryption> </Protocol> </Account> </Response></Autodiscover>
* где из основных параметров на нужны:
Открываем браузер и переходим по адресу https://autodiscover.admins24.com/autodiscover/autodiscover.xml, где вместо admins24.com должен быть Ваш домен. Мы должны увидеть наш XML.
Теперь открываем MS Outlook и получаем автоматически настройки для [email protected]
Наш файл конфигурации рассчитан только на настройку одного адреса. Теперь нужно настроить его на обслуживание любого email. Для этого необходимо написать скрипт, например, на php и немного донастроить сервер.
Установим php и php-fpm, после разрешаем автозапуск php-fpm и стартуем его:
yum install php php-fpm
systemctl enable php-fpm
systemctl start php-fpm
apt-get install php php-fpm
systemctl enable php7.2-fpm
systemctl start php7.2-fpm
* где 7.2 — версия установленной php (проверяется командой php -v).
vi /etc/php-fpm.d/www.conf
…listen = /var/run/php-fpm/php-fpm.sock…
systemctl restart php-fpm
vi /etc/php/7.2/fpm/pool.d/www.conf
systemctl restart php7.2-fpm
Внесем настройки в наш виртуальный домен:
… error_page 405 =200 $uri;
location ~ \.php$ { set $root_path /usr/share/nginx/html/autodiscover; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name; include fastcgi_params; fastcgi_param DOCUMENT_ROOT $root_path; }…
* мы добавили обработку скриптов php с помощью php-fpm.
Перезапускаем наш сервер:
Создадим скрипт php:
vi /usr/share/nginx/html/autodiscover/autodiscover/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);
//set Content-Typeheader(«Content-Type: application/xml»);?><?php 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>imap.admins24.com</Server> <Port>993</Port> <LoginName><?php echo $matches[1]; ?></LoginName> <AuthRequired>on</AuthRequired> <DomainRequired>on</DomainRequired> <SPA>on</SPA> <SSL>on</SSL> <Encryption>SSL</Encryption> </Protocol> <Protocol> <Type>POP3</Type> <Server>imap.admins24.com</Server> <Port>995</Port> <LoginName><?php echo $matches[1]; ?></LoginName> <AuthRequired>on</AuthRequired> <DomainRequired>on</DomainRequired> <SPA>on</SPA> <SSL>on</SSL> <Encryption>SSL</Encryption> </Protocol> <Protocol> <Type>SMTP</Type> <Server>imap.admins24.com</Server> <Port>587</Port> <LoginName><?php echo $matches[1]; ?></LoginName> <AuthRequired>on</AuthRequired> <DomainRequired>on</DomainRequired> <SPA>on</SPA> <SSL>on</SSL> <SMTPLast>on</SMTPLast> <Encryption>TLS</Encryption> </Protocol> </Account> </Response></Autodiscover>
Открываем браузер и переходим по адресу https://autodiscover.admins24.com/autodiscover/autodiscover.php — должен загрузиться XML-документ. В тегах LoginName должно быть пусто.
Теперь настроим, чтобы наш веб-сервер переводил запросы xml на наш скрипт php. Открываем настройку нашего виртуального домена:
… и добавим:
… location = /autodiscover/autodiscover.xml { rewrite ^/autodiscover/autodiscover.xml$ /autodiscover/autodiscover.php; }…
Перезапускаем nginx:
Открываем браузер и переходим по адресу https://autodiscover.admins24.com/autodiscover/autodiscover.xml — должен загрузиться XML-документ. В тегах LoginName должно быть пусто. Значит перенаправление сработало.
Теперь можно открывать Outlook и проверять автонастройку для других почтовых ящиков.
Механизм автонастройки от Mozilla похож на Microsoft. Необходимые настройки должны отдаваться веб-сервером в виде XML-документа. Однако запрос не https, а http; и не POST, а GET. Также обращение идет сначала в формате server.domain/mail/[email protected], и если ответ не будет получен — autoconfig.server.domain/mail/[email protected].
Также, как с Outlook, необходимо настроить DNS и веб-сервер.
создаем А-запись (или CNAME). Пример в bind:
autoconfig IN A 111.111.111.111
Настраивая autodiscovery для Microsoft, мы уже настроили веб-сервер NGINX. Теперь нужно добавить виртуальный домен и создать соответствующий документ.
Откроем уже созданный нами файл конфигурации:
… и добавим в него:
…
server { listen 80; server_name autoconfig.admins24.com; root /usr/share/nginx/html/autodiscover;}
Создаем каталог для хранения XML:
mkdir -p /usr/share/nginx/html/autodiscover/mail
Создаем документ:
vi /usr/share/nginx/html/autodiscover/mail/config-v1.1.xml
<?xml version=»1.0″ encoding=»UTF-8″?><clientConfig version=»1.1″> <emailProvider id=»admins24.com»> <domain>admins24.com</domain> <displayName>Почта admins24.com</displayName> <displayShortName>admins24.com</displayShortName> <incomingServer type=»imap»> <hostname>imap.admins24.com</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <incomingServer type=»pop»> <hostname>pop.admins24.com</hostname> <port>995</port> <socketType>SSL</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type=»smtp»> <hostname>smtp.admins24.com</hostname> <port>587</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> </emailProvider></clientConfig>
* где:
Это метод, призванный быть универсальным. Более того, он описан стандартом RFC.
Суть заключается в создании SRV-записей в DNS. Данная запись создается по следующему синтаксису:
_<имя службы>._<протокол> <приоритет> <вес> <порт> <хост>
Пример записей для настройки почты:
* в данном примере мы отдаем приоритет более защищенным средствам подключения (smtps, imaps, pop3s).
Пример записей в DNS Bind:
_smtp._tcp IN SRV 10 0 25 smtp.admins24.com._pop3._tcp IN SRV 20 0 110 pop.admins24.com._imap._tcp IN SRV 10 0 143 imap.admins24.com._smtps._tcp IN SRV 0 0 465 smtp.admins24.com._submission._tcp IN SRV 0 0 587 smtp.admins24.com._imaps._tcp IN SRV 0 0 993 imap.admins24.com._pop3s._tcp IN SRV 10 0 995 pop.admins24.com.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies