###############
# General
###############
log_path = /dev/stderr
protocols = imap pop3 lmtp sieve
postmaster_address = {{ POSTMASTER }}@{{ DOMAIN }}
hostname = {{ HOSTNAMES.split(",")[0] }}
submission_host = {{ FRONT_ADDRESS }}

service dict {
  unix_listener dict {
    group = mail
    mode = 0660
  }
}

dict {
  sieve = sqlite:/etc/dovecot/pigeonhole-sieve.dict
}

###############
# Full-text search
###############
mail_plugins =  $mail_plugins fts fts_lucene

plugin {
  fts = lucene

  fts_autoindex = yes
  fts_autoindex_exclude = \Junk

  fts_lucene = whitespace_chars=@.
}

###############
# Mailboxes
###############
first_valid_gid = 8
first_valid_uid = 8
mail_location = maildir:/mail/%u
mail_home = /mail/%u
mail_uid = mail
mail_gid = mail
mail_privileged_group = mail
mail_access_groups = mail
maildir_stat_dirs = yes
mailbox_list_index = yes
mail_vsize_bg_after_count = 100
mail_plugins = $mail_plugins quota quota_clone zlib

namespace inbox {
  inbox = yes
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
}

plugin {
  quota = count:User quota
  quota_vsizes = yes
  quota_clone_dict = redis:host={{ REDIS_ADDRESS }}:port=6379:db=1

  {% if COMPRESSION in [ 'gz', 'bz2' ] %}
  zlib_save = {{ COMPRESSION }}
  {% endif %}

  {% if COMPRESSION_LEVEL %}
  zlib_save_level = {{ COMPRESSION_LEVEL }}
  {% endif %}
}

###############
# Authentication
###############
auth_mechanisms = plain login
disable_plaintext_auth = no
ssl_protocols = !SSLv3

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

service auth {
  user = dovecot
  unix_listener auth-userdb {
  }
}

service auth-worker {
  unix_listener auth-worker {
    user = dovecot
    group = mail
    mode = 0660
  }
  user = mail
}

###############
# IMAP & POP
###############

protocol imap {
  mail_plugins = $mail_plugins imap_quota imap_sieve
}

protocol pop3 {

}

service imap-login {
  inet_listener imap {
    port = 143
  }
}

###############
# Delivery
###############

protocol lmtp {
  mail_plugins = $mail_plugins sieve
  recipient_delimiter = {{ RECIPIENT_DELIMITER }}
}

service lmtp {
  inet_listener lmtp {
    port = 2525
  }
}


###############
# Filtering
###############

service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}

service managesieve {
}

plugin {
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_plugins = sieve_extdata sieve_imapsieve sieve_extprograms
  sieve_global_extensions = +vnd.dovecot.extdata +spamtest +spamtestplus +vnd.dovecot.execute +editheader
  sieve_before = /var/lib/dovecot/before.sieve
  sieve_default = /var/lib/dovecot/default.sieve
  sieve_after = /var/lib/dovecot/after.sieve
  sieve_extdata_dict_uri = proxy::sieve

  # Sieve execute
  sieve_execute_bin_dir = /var/lib/dovecot/bin

  # Send vacation replies even for aliases
  # See the Pigeonhole documentation about warnings: http://wiki2.dovecot.org/Pigeonhole/Sieve/Extensions/Vacation
  # It appears that our implemntation of mail delivery meets criteria of section 4.5
  # from RFC 5230 and that disabling the recipient checks is not an issue here.
  sieve_vacation_dont_check_recipient = yes

  # Include the recipient in vacation replies so that DKIM applies
  sieve_vacation_send_from_recipient = yes

  # extract spam score from headers
  sieve_spamtest_status_type = strlen
  sieve_spamtest_status_header = X-Spam-Level
  sieve_spamtest_max_value = 15

  # Learn from spam
  imapsieve_mailbox1_name = Junk
  imapsieve_mailbox1_causes = COPY
  imapsieve_mailbox1_before = file:/var/lib/dovecot/report-spam.sieve
  imapsieve_mailbox2_name = *
  imapsieve_mailbox2_from = Junk
  imapsieve_mailbox2_causes = COPY
  imapsieve_mailbox2_before = file:/var/lib/dovecot/report-ham.sieve
}

###############
# Extensions
###############

!include_try /overrides/dovecot.conf
