ISPmail (15): Tự động cấu hình mail client

Ý tưởng là đơn giản hoá việc cài đặt mail trên mail client như Thunderbird hay Outlook (2 mail client hỗ trợ Autoconfig hoặc autodiscover).

Người dùng có thể chi cần nhập địa chỉ email là mail client biết cách cài đặt các thông số như imap hay smtp. Muốn vậy mail client phải có cơ chế liên lạc với mailserver để lấy thông tin cài đặt.

Thunderbird lần lượt tìm file cài đặt tại

  • http://autoconfig.example.org/mail/config-v1.1.xml?emailaddress=user@example.org
  • http://example.org/.well-known/autoconfig/mail/config-v1.1.xml?emailaddress=user@example.org

Outlook lần lượt tìm file cài đặt tại

  • https://example.org/autodiscover/autodiscover.xml
  • https://autodiscover.example.org/autodiscover/autodiscover.xml
  • https://example.org/autodiscover/autodiscover.xml

Tạo các file cấu hình dạng xml

Chúng ta tạo thư mục autodiscover tại /var/www/$(hostname -f)/autodiscover (/var/www/mx.example.org/autodiscover)

config-v1.1.xml

<?xml version="1.0" encoding="UTF-8"?>

<clientConfig version="1.1">
  <emailProvider id="example.org">
    <domain>example.org</domain>
    <displayName>My Crazy Mail Service</displayName>
    <displayShortName>CrazyMail</displayShortName>
    <incomingServer type="imap">
      <hostname>mx.example.org</hostname>
      <port>143</port>
      <socketType>STARTTLS</socketType>
      <authentication>password-cleartext</authentication>
      <username>%EMAILADDRESS%</username>
    </incomingServer>
    <incomingServer type="pop3">
      <hostname>mx.example.org</hostname>
      <port>110</port>
      <socketType>STARTTLS</socketType>
      <authentication>password-cleartext</authentication>
      <username>%EMAILADDRESS%</username>
    </incomingServer>
    <outgoingServer type="smtp">
      <hostname>mx.example.org</hostname>
      <port>587</port>
      <socketType>STARTTLS</socketType>
      <authentication>password-cleartext</authentication>
      <username>%EMAILADDRESS%</username>
    </outgoingServer>
  </emailProvider>
</clientConfig>

autodiscover.xml -> 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-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>mx.example.org</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>mx.example.org</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>mx.example.org</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>

Tạo website

Chúng ta có 2 dạng website http và https bao gồm 2 link:

  • autoconfig.example.org/mail/config-v1.1.xml
  • autodiscover.example.org/autodiscover/autodiscover.xml

Apache

<IfModule mod_alias.c>
  AliasMatch (?i)/mail/config-v1.1.xml /var/www/mx.example.org/autodiscover/config-v1.1.xml
  AliasMatch (?i)/Autodiscover/Autodiscover.xml /var/www/mx.example.org/autodiscover/autodiscover.php

Nginx

location ~ /mail/config-v1.1.xml {
    root /var/www/mx.example.org/autodiscover/;
    try_files /config-v1.1.xml =404;
    fastcgi_pass    ???;
    fastcgi_index   index.php;
    include         fastcgi.conf;
    fastcgi_param   SERVER_ADDR "";
    fastcgi_param   REMOTE_ADDR $http_x_real_ip;
}
location ~ /(?:a|A)utodiscover/(?:a|A)utodiscover.xml {
    root /var/www/mx.example.org/autodiscover/;
    try_files /autodiscover.php =404;
    fastcgi_pass    ???;
    fastcgi_index   index.php;
    include         fastcgi.conf;
    fastcgi_param   SERVER_ADDR "";
    fastcgi_param   REMOTE_ADDR $http_x_real_ip;
}

Cấu hình DNS

Theo cài đặt, có một webserver đặt tại mx.example.org, đã cấu hình httphttps. Chúng ta chỉ cần chèn vào cuối file cấu hình http và https đoạn cấu hình như trên tùy theo webserver là Apache hay Nginx (mặc định Apache2).

Ngoài ra cài đặt còn liên quan đên các domain:

  • mx.example.org
  • autoconfig.example.org
  • autodiscover.example.org

Trong đó mx.example.org là hostname của RPi cài mailserver, có IP trỏ về RPi. Các domain khác có thể khai báo là CNAME của mx.example.org và sau này chỉ cần cập nhật IP của mx.example.org

Ngoài ra không cần dùng url liên quan đến domain chính. Chỉ xài các subdomain autoconfig và autodiscover là đủ.

Tuy vậy vẫn phải lấy chứng chỉ Let’s Encrypt cho tất cả domain được dùng.

Test

Tạo file tạm /tmp/outlook.xml cung cấp email cần cài đặt có nội dung như sau:

<?xml version="1.0" encoding="utf-8" ?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
    <Request>
        <AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>

        <!-- EMailAddress: indicates the user's email address. OPTIONAL -->
        <EMailAddress>user@example.org</EMailAddress>
    </Request>
</Autodiscover>

Thử chạy lệnh curl để mở file cấu hình

curl -k -X POST -d @/tmp/outlook.xml https://autodiscover.example.org/autodiscover/autodiscover.xml

Nếu thấy được nội dung file cấu hình là cài đặt đúng.

Comments Off on ISPmail (15): Tự động cấu hình mail client

Filed under Software

Comments are closed.