This service is created to autodiscover your provider email settings.
It provides IMAP/POP/SMTP/LDAP Autodiscover capabilities on Microsoft Outlook/Apple Mail, Autoconfig capabilities for Thunderbird, and Configuration Profiles for iOS/Apple Mail.
A simple support page is also available at the root of the autodiscover domain.
autoconfig IN A {{$AUTODISCOVER_IP}}
autodiscover IN A {{$AUTODISCOVER_IP}}
imap IN CNAME {{$MX_DOMAIN}}.
smtp IN CNAME {{$MX_DOMAIN}}.
@ IN MX 10 {{$MX_DOMAIN}}.
@ IN TXT "mailconf=https://autoconfig.{{$DOMAIN}}/mail/config-v1.1.xml"
_imaps._tcp IN SRV 0 0 {{IMAP_PORT}} {{MX_DOMAIN}}.
_pop3s._tcp IN SRV 0 0 {{POP_PORT}} {{MX_DOMAIN}}.
_submission._tcp IN SRV 0 0 {{SMTP_PORT}} {{MX_DOMAIN}}.
_autodiscover._tcp IN SRV 0 0 443 autodiscover.{{$DOMAIN}}.
_ldap._tcp IN SRV 0 0 {{LDAP_PORT}} {{LDAP_HOST}}.
Replace above variables with data according to this table
Variable | Description |
---|---|
MX_DOMAIN | The hostname name of your MX server |
DOMAIN | Your apex/bare/naked Domain |
AUTODISCOVER_IP | IP of the Autoconfig HTTP |
IMAP_PORT | Port for your IMAP server |
POP_PORT | Port for your POP server |
SMTP_PORT | Port for your SMTP server |
LDAP_HOST | The hostname of your LDAP server |
LDAP_PORT | Port for your LDAP server |
traefik can proxy your containers on docker, on docker swarm, and on a wide range of orchestrators. You can also achieve this with another proxy like Nginx for instance.
Though not the preferred solution, it is also possible to run the project without docker, as a systemd
service.
version: '2'
services:
autodiscover-example-com:
image: monogramm/autodiscover-email-settings:latest
container_name: autodiscover
environment:
- COMPANY_NAME=Company
- SUPPORT_URL=https://autodiscover.example.com
- DOMAIN=example.com
# IMAP configuration (host mandatory to enable)
- IMAP_HOST=imap.example.com
- IMAP_PORT=993
- IMAP_SOCKET=SSL
# POP configuration (host mandatory to enable)
- POP_HOST=pop3.example.com
- POP_PORT=995
- POP_SOCKET=SSL
# SMTP configuration (host mandatory to enable)
- SMTP_HOST=smtp.example.com
- SMTP_PORT=587
- SMTP_SOCKET=STARTTLS
# MobileSync/ActiveSync configuration (url mandatory to enable)
- MOBILESYNC_URL=https://sync.example.com
- MOBILESYNC_NAME=sync.example.com
# LDAP configuration (host mandatory to enable)
- LDAP_HOST=ldap.example.com
- LDAP_PORT=636
- LDAP_SOCKET=SSL
- LDAP_BASE=dc=ldap,dc=example,dc=com
- LDAP_USER_FIELD=uid
- LDAP_USER_BASE=ou=People,dc=ldap,dc=example,dc=com
- LDAP_SEARCH=(|(objectClass=PostfixBookMailAccount))
# Apple mobile config identifiers (identifier mandatory to enable)
- PROFILE_IDENTIFIER=com.example.autodiscover
- PROFILE_UUID=92943D26-CAB3-4086-897D-DC6C0D8B1E86
- MAIL_UUID=7A981A9E-D5D0-4EF8-87FE-39FD6A506FAC
- LDAP_UUID=6ECB6BA9-2208-4ABF-9E60-4E9F4CD7309E
labels:
- "traefik.port=8000"
- "traefik.frontend.rule=Host:autoconfig.example.com,autodiscover.example.com"
version: '3'
services:
autodiscover-example-com:
image: monogramm/autodiscover-email-settings:latest
container_name: autodiscover
environment:
- COMPANY_NAME=Company
- SUPPORT_URL=https://autodiscover.example.com
- DOMAIN=example.com
# IMAP configuration (host mandatory to enable)
- IMAP_HOST=imap.example.com
- IMAP_PORT=993
- IMAP_SOCKET=SSL
# POP configuration (host mandatory to enable)
- POP_HOST=pop3.example.com
- POP_PORT=995
- POP_SOCKET=SSL
# SMTP configuration (host mandatory to enable)
- SMTP_HOST=smtp.example.com
- SMTP_PORT=587
- SMTP_SOCKET=STARTTLS
# MobileSync/ActiveSync configuration (url mandatory to enable)
- MOBILESYNC_URL=https://sync.example.com
- MOBILESYNC_NAME=sync.example.com
# LDAP configuration (host mandatory to enable)
- LDAP_HOST=ldap.example.com
- LDAP_PORT=636
- LDAP_SOCKET=SSL
- LDAP_BASE=dc=ldap,dc=example,dc=com
- LDAP_USER_FIELD=uid
- LDAP_USER_BASE=ou=People,dc=ldap,dc=example,dc=com
- LDAP_SEARCH=(|(objectClass=PostfixBookMailAccount))
# Apple mobile config identifiers (identifier mandatory to enable)
- PROFILE_IDENTIFIER=com.example.autodiscover
- PROFILE_UUID=92943D26-CAB3-4086-897D-DC6C0D8B1E86
- MAIL_UUID=7A981A9E-D5D0-4EF8-87FE-39FD6A506FAC
- LDAP_UUID=6ECB6BA9-2208-4ABF-9E60-4E9F4CD7309E
deploy:
replicas: 1
labels:
- "traefik.port=8000"
- "traefik.frontend.rule=Host:autoconfig.example.com,autodiscover.example.com"
The following is an example of NGinx configuration assuming NGinx for Autodiscover Email Settings located at autoconfig.example.com
and autodiscover.example.com
. The following setup assumes NGinx to be running on the host machine and autodiscover to expose itself on port 8000:
# HTTP configuration with HTTPS redirection
server {
listen 80;
listen [::]:80;
server_name autoconfig.example.com autodiscover.example.com;
return 301 https://$server_name$request_uri;
}
# HTTPS configuration with Let's Encrypt certificates
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name autoconfig.example.com autodiscover.example.com;
# Set location of error and access logs
error_log /var/log/nginx/autoconfig.example.com/error.log;
access_log /var/log/nginx/autoconfig.example.com/access.log combined_ssl;
# Hide Nginx version
server_tokens off;
# SSL configuration (adapt to your environment or managed by Certbot)
ssl_certificate /etc/letsencrypt/live/autoconfig.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/autoconfig.example.com/privkey.pem;
include /etc/nginx/ssl_params;
include /etc/nginx/header_params;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
# Enable HSTS once SSL configuration fully validated
#add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
add_header Front-End-Https on;
# Redirect NGinx traffic to locally running autodiscover
# if NGinx is running inside docker, adapt to either DOCKER_HOST or docker container name
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
}
}
The following is an example of systemd
service configuration for Autodiscover Email Settings. The following setup assumes the following:
node
andyarn
are installed on your marchine- project is located at
/srv/http/autodiscover
- the project dependencies have been previously installed with
yarn --prod
- there is an
autodiscover
user and group with sufficient permissions to read the project and runnode
[Unit]
Description=Autodiscover service
[Service]
Type=simple
WorkingDirectory=/srv/http/autodiscover
User=autodiscover
Group=autodiscover
Environment="NODE_ENV=production"
#Environment="COMPANY_NAME=Company"
#Environment="SUPPORT_URL=https://autodiscover.example.com"
#Environment="DOMAIN=example.com"
# IMAP configuration (host mandatory to enable)
Environment="IMAP_HOST=imap.example.com"
Environment="IMAP_PORT=993"
Environment="IMAP_SOCKET=SSL"
# POP configuration (host mandatory to enable)
#Environment="POP_HOST=imap.example.com"
#Environment="POP_PORT=995"
#Environment="POP_SOCKET=SSL"
# SMTP configuration (host mandatory to enable)
Environment="SMTP_HOST=imap.example.com"
Environment="SMTP_PORT=465"
Environment="SMTP_SOCKET=SSL"
# MobileSync/ActiveSync configuration (url mandatory to enable)
#Environment="MOBILESYNC_URL=https://sync.example.com"
#Environment="MOBILESYNC_NAME=sync.example.com"
# LDAP configuration (host mandatory to enable)
#Environment="LDAP_HOST=ldap.example.com"
#Environment="LDAP_PORT=636"
#Environment="LDAP_SOCKET=SSL"
#Environment="LDAP_BASE=dc=ldap,dc=example,dc=com"
#Environment="LDAP_USER_FIELD=uid"
#Environment="LDAP_USER_BASE=ou=People,dc=ldap,dc=example,dc=com"
#Environment="LDAP_SEARCH=(|(objectClass=PostfixBookMailAccount))"
# Apple mobile config identifiers (identifier mandatory to enable)
Environment="PROFILE_IDENTIFIER=com.example.autodiscover"
Environment="PROFILE_UUID=92943D26-CAB3-4086-897D-DC6C0D8B1E86"
Environment="MAIL_UUID=7A981A9E-D5D0-4EF8-87FE-39FD6A506FAC"
#Environment="LDAP_UUID=6ECB6BA9-2208-4ABF-9E60-4E9F4CD7309E"
ExecStart=/usr/bin/node /srv/http/autodiscover/index.js
Restart=always
[Install]
WantedBy=multi-user.target
Inspired from https://github.com/sylvaindumont/autodiscover.xml, but without the few restrictions mentioned in the original project notes and with a simple support page to allow manual setup and iOS profile download.
The original project was inspired from https://github.com/johansmitsnl/docker-email-autodiscover, but with https://github.com/Tiliq/autodiscover.xml instead of https://github.com/gronke/email-autodiscover to allow a much lighter image based of node on alpine instead of apache on debian.
Thanks to @HLFH for providing sample NGinx configuration and systemd service configuration.
The above autoconfiguration methods assume the following:
- If username does not contain
@
, full email address will be generated based on domain settings
-
Mozilla Autoconfig configuration
-
Microsoft Exchange Command Reference
-
Bootstrap, jQuery and Popper.js used for default support page
This project is distributed under the MIT License