diff --git a/group_vars/autoconfig.yml b/group_vars/autoconfig.yml
new file mode 100644
index 0000000000000000000000000000000000000000..02d5805cc9bf9f6b9762aa34ccaa0803b4aa1bc8
--- /dev/null
+++ b/group_vars/autoconfig.yml
@@ -0,0 +1,24 @@
+---
+glob_autoconfig:
+  provider: crans.org
+  domains:
+    - crans.org
+    - crans.eu
+    - crans.fr
+  name:
+    long: Cr@ns Mail
+    short: Cr@ns
+  incoming:
+    type: imap
+    hostname: imap.crans.org
+    port: 993
+    socket_type: SSL
+    username: "%EMAILLOCALPART%"
+    authentication: plain
+  outgoing:
+    type: smtp
+    hostname: smtp.crans.org
+    port: 465
+    socket_type: SSL
+    username: "%EMAILLOCALPART%"
+    authentication: plain
diff --git a/host_vars/hodaur.adm.crans.org.yml b/host_vars/hodaur.adm.crans.org.yml
index 53d3a98a63a5a588ccdc109e84b1082b780f441b..90e9078bd2d5a6eabe4068b5d20d478da7751e28 100644
--- a/host_vars/hodaur.adm.crans.org.yml
+++ b/host_vars/hodaur.adm.crans.org.yml
@@ -2,3 +2,6 @@
 interfaces:
   adm: ens18
   srv: ens19
+
+loc_autoconfig:
+  path: /var/www/autoconfig.crans.org
diff --git a/hosts b/hosts
index a4e8b96d641c72bc919fa570a5ec38f2293e921c..906cf4e44c01018252b11791bb71da1fa0f1491b 100644
--- a/hosts
+++ b/hosts
@@ -3,6 +3,9 @@
 [adh_server]
 zamok.adm.crans.org
 
+[autoconfig]
+hodaur.adm.crans.org
+
 [backup_data]
 cameron.adm.crans.org
 
diff --git a/plays/autoconfig.yml b/plays/autoconfig.yml
new file mode 100755
index 0000000000000000000000000000000000000000..e8dfcd84254d214d2397cff4effaa11046440316
--- /dev/null
+++ b/plays/autoconfig.yml
@@ -0,0 +1,7 @@
+#!/usr/bin/env ansible-playbook
+---
+- hosts: autoconfig
+  vars:
+    autoconfig: "{{ glob_autoconfig | default({}) | combine(loc_autoconfig | default({})) }}"
+  roles:
+    - autoconfig
diff --git a/roles/autoconfig/tasks/main.yml b/roles/autoconfig/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0d06b2063facd92b705a6e9f7934c8247c552c89
--- /dev/null
+++ b/roles/autoconfig/tasks/main.yml
@@ -0,0 +1,9 @@
+- name: Create base directory
+  file:
+    path: "{{ autoconfig.path }}/mail"
+    state: directory
+
+- name: Deploy autoconfiguration website
+  template:
+    src: mail/config-v1.1.xml.j2
+    dest: "{{ autoconfig.path }}/mail/config-v1.1.xml"
diff --git a/roles/autoconfig/templates/mail/config-v1.1.xml.j2 b/roles/autoconfig/templates/mail/config-v1.1.xml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..d69170c5b3a6c2bbf531578d71f9ad874f8826fb
--- /dev/null
+++ b/roles/autoconfig/templates/mail/config-v1.1.xml.j2
@@ -0,0 +1,25 @@
+<clientConfig version="1.0">
+  <emailProvider id="{{ autoconfig.provider }}">
+{% for domain in autoconfig.domains %}
+    <domain>{{ domain }}</domain>
+{% endfor %}
+    <displayName>{{ autoconfig.name.long }}</displayName>
+    <displayShortName>{{ autoconfig.name.short }}</displayShortName>
+{% set i = autoconfig.incoming %}
+    <incomingServer type="{{ i.type }}">
+      <hostname>{{ i.hostname }}</hostname>
+      <port>{{ i.port }}</port>
+      <socketType>{{ i.socket_type }}</socketType>
+      <username>{{ i.username }}</username>
+      <authentication>{{ i.authentication }}</authentication>
+    </incomingServer>
+{% set o = autoconfig.outgoing %}
+    <outgoingServer type="{{ o.type }}">
+      <hostname>{{ o.hostname }}</hostname>
+      <port>{{ o.port }}</port>
+      <socketType>{{ o.socket_type }}</socketType>
+      <username>{{ o.username }}</username>
+      <authentication>{{ o.authentication }}</authentication>
+    </outgoingServer>
+  </emailProvider>
+</clientConfig>