Dovecot imapsieve integration
This commit is contained in:
parent
1b86e487cc
commit
dd574e28f5
3 changed files with 74 additions and 2 deletions
|
|
@ -27,6 +27,21 @@ mailserver:
|
||||||
dovecot:
|
dovecot:
|
||||||
debug: false
|
debug: false
|
||||||
config: {}
|
config: {}
|
||||||
|
# Define shell scripts callable from sieve scripts via vnd.dovecot.execute
|
||||||
|
# Per default, these are only available in global sieve scripts (i.e. not in user scripts)!
|
||||||
|
sieve_extprograms: {} # cmd name -> shell script
|
||||||
|
# Global sieve scripts
|
||||||
|
sieve_after: null
|
||||||
|
sieve_default: null
|
||||||
|
sieve_before: null
|
||||||
|
sieve_mailbox_handlers: {} # See imapsieve_mailboxXXX, list items
|
||||||
|
# from_elsewhere_to_spam:
|
||||||
|
# name: Spam
|
||||||
|
# causes: COPY
|
||||||
|
# before: |
|
||||||
|
# require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables", "imap4flags"];
|
||||||
|
# addflag "\\Seen";´
|
||||||
|
# pipe :copy "learn-spam.rspamd.script";
|
||||||
postfixadmin:
|
postfixadmin:
|
||||||
php_fpm_config:
|
php_fpm_config:
|
||||||
user: postfixadmin
|
user: postfixadmin
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,45 @@
|
||||||
- dovecot-dict-sql.conf
|
- dovecot-dict-sql.conf
|
||||||
notify: restart dovecot
|
notify: restart dovecot
|
||||||
|
|
||||||
|
- name: create global sieve directories
|
||||||
|
ansible.builtin.file:
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0755
|
||||||
|
path: "{{ item }}"
|
||||||
|
loop:
|
||||||
|
- /etc/dovecot/sieve-scripts
|
||||||
|
- /etc/dovecot/sieve-extprograms
|
||||||
|
|
||||||
|
- name: copy sieve extprograms
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: "{{ item.value }}\n"
|
||||||
|
dest: "/etc/dovecot/sieve-extprograms/{{ item.key }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0755"
|
||||||
|
loop: "{{ mailserver.dovecot.sieve_extprograms|dict2items }}"
|
||||||
|
|
||||||
|
- name: copy sieve scripts
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: "{{ item.value }}\n"
|
||||||
|
dest: "/etc/dovecot/sieve-scripts/{{ item.key }}.sieve"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
loop: |
|
||||||
|
{%- set result = {'after': mailserver.dovecot.sieve_after, 'before': mailserver.dovecot.sieve_before, 'default': mailserver.dovecot.sieve_default} -%}
|
||||||
|
{%- for name, handler in mailserver.dovecot.sieve_mailbox_handlers.items() -%}
|
||||||
|
{%- set tmp = result.update(**{'mailbox_'+name+'_before': handler.before|d(none), 'mailbox_'+name+'_after': handler.after|d(none)}) -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{ result|dict2items|selectattr('value')|tojson }}
|
||||||
|
register: mailserver_sieve_scripts
|
||||||
|
|
||||||
|
- name: compile sieve scripts
|
||||||
|
ansible.builtin.shell: "sievec '{{ item.dest }}'"
|
||||||
|
loop: "{{ mailserver_sieve_scripts.results }}"
|
||||||
|
|
||||||
# prometheus-postfix-exporter
|
# prometheus-postfix-exporter
|
||||||
- name: configure prometheus postfix exporter
|
- name: configure prometheus postfix exporter
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,7 @@ namespace inbox {
|
||||||
|
|
||||||
# IMAP
|
# IMAP
|
||||||
protocol imap {
|
protocol imap {
|
||||||
# TODO: imap_quota?
|
mail_plugins = $mail_plugins imap_sieve
|
||||||
mail_plugins = $mail_plugins
|
|
||||||
}
|
}
|
||||||
|
|
||||||
service imap-login {
|
service imap-login {
|
||||||
|
|
@ -75,6 +74,25 @@ service imap-login {
|
||||||
# Sieve
|
# Sieve
|
||||||
plugin {
|
plugin {
|
||||||
sieve = file:~/sieve;active=~/.dovecot.sieve
|
sieve = file:~/sieve;active=~/.dovecot.sieve
|
||||||
|
sieve_plugins = sieve_imapsieve sieve_extprograms
|
||||||
|
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.execute
|
||||||
|
sieve_pipe_bin_dir = /etc/dovecot/sieve-extprograms
|
||||||
|
|
||||||
|
{% for name, handler in mailserver.dovecot.sieve_mailbox_handlers.items() %}
|
||||||
|
# {{ name }}
|
||||||
|
imapsieve_mailbox{{ loop.index }}_name = {{ handler.name }}
|
||||||
|
imapsieve_mailbox{{ loop.index }}_causes = {{ handler.causes }}
|
||||||
|
{% if handler.from|d(False) %}
|
||||||
|
imapsieve_mailbox{{ loop.index }}_from = {{ handler.from }}
|
||||||
|
{% endif %}
|
||||||
|
{% if handler.before|d(False) %}
|
||||||
|
imapsieve_mailbox{{ loop.index }}_before = /etc/dovecot/sieve-scripts/mailbox_{{ name }}_before.sieve
|
||||||
|
{% endif %}
|
||||||
|
{% if handler.after|d(False) %}
|
||||||
|
imapsieve_mailbox{{ loop.index }}_after = /etc/dovecot/sieve-scripts/mailbox_{{ name }}_after.sieve
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
service managesieve-login {
|
service managesieve-login {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue