Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| docker_notes:docker-mailserver [2025-06-01 Sun wk22 22:03] – [Dovecot References] baumkp | docker_notes:docker-mailserver [2025-08-16 Sat wk33 19:39] (current) – [exim] baumkp | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| {{tag> | {{tag> | ||
| ======Docker mailserver====== | ======Docker mailserver====== | ||
| - | This mailserver setup follows Workaround' | + | This mailserver setup follows Workaround' |
| //As this follows Workaround' | //As this follows Workaround' | ||
| Line 371: | Line 371: | ||
| =====dovecot===== | =====dovecot===== | ||
| - | ''/ | + | In Dovecot <2.4.x the main configuration are in files ''/ |
| < | < | ||
| 2.3.20 (80a5ac675d) </ | 2.3.20 (80a5ac675d) </ | ||
| Line 377: | Line 377: | ||
| *'' | *'' | ||
| - | Dovecot version 2.4.0 seems to have broken the configuration files from 2.3.x and earlier. | + | Alpine Linux version 3.22 from May 2025 used Dovecot 2.4.1 and while I can use an older version of Alpine eventually I would need to upgrade Dovecot to the new configuration file syntax. |
| + | ++++Discussion on configuration files| | ||
| + | I suspect the '' | ||
| + | The only other issue is use of override files in '' | ||
| + | ++++ | ||
| + | ====dovecot.conf==== | ||
| ++++/ | ++++/ | ||
| - | < | + | # Start new configs with the latest Dovecot version numbers here:\\ |
| - | dovecot_config_version = 2.4.1 | + | [[https:// |
| - | dovecot_storage_version = 2.4.1 | + | [[https:// |
| - | #mail_debug = yes | + | #[[https:// |
| - | #log_debug = category=ssl | + | # |
| - | mail_cache_max_size = 128M | + | [[https:// |
| - | auth_mechanisms = plain login | + | [[https:// |
| - | info_log_path = / | + | [[https:// |
| - | log_path = / | + | [[https:// |
| - | mail_driver = maildir | + | [[https:// |
| - | mail_path = ~/ | + | mail_path = ~/Maildir\\ |
| - | mail_plugins { | + | mail_plugins {\\ |
| - | quota = yes | + | quota = yes\\ |
| - | } | + | }\\ |
| - | # | + | # |
| - | # sieve_extprograms = yes | + | # sieve_extprograms = yes\\ |
| - | #} | + | #}\\ |
| - | managesieve_notify_capability = mailto | + | managesieve_notify_capability = mailto\\ |
| - | managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i; | + | managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i; |
| - | mbox_write_locks = fcntl | + | mbox_write_locks = fcntl\\ |
| - | namespace inbox { | + | namespace inbox {\\ |
| - | inbox = yes | + | inbox = yes\\ |
| - | mailbox Drafts { | + | mailbox Drafts {\\ |
| - | special_use = \Drafts | + | special_use = \Drafts\\ |
| - | } | + | }\\ |
| - | mailbox Junk { | + | mailbox Junk {\\ |
| - | special_use = \Junk | + | special_use = \Junk\\ |
| - | } | + | }\\ |
| - | mailbox Sent { | + | mailbox Sent {\\ |
| - | special_use = \Sent | + | special_use = \Sent\\ |
| - | } | + | }\\ |
| - | mailbox "Sent Messages" | + | mailbox "Sent Messages" |
| - | special_use = \Sent | + | special_use = \Sent\\ |
| - | } | + | }\\ |
| - | mailbox Trash { | + | mailbox Trash {\\ |
| - | special_use = \Trash | + | special_use = \Trash\\ |
| - | } | + | }\\ |
| - | prefix = | + | prefix = \\ |
| - | } | + | }\\ |
| - | quota " | + | quota " |
| - | #quota = maildir: | + | #quota = maildir: |
| - | quota_status_nouser = DUNNO | + | quota_status_nouser = DUNNO\\ |
| - | quota_status_overquota = 452 4.2.2 Mailbox is full and cannot receive any more emails | + | quota_status_overquota = 452 4.2.2 Mailbox is full and cannot receive any more emails\\ |
| - | quota_status_success = DUNNO | + | quota_status_success = DUNNO\\ |
| - | warning warn-95 { | + | warning warn-95 {\\ |
| - | quota_storage_percentage = 95 | + | quota_storage_percentage = 95 \\ |
| - | execute quota-warning { | + | execute quota-warning {\\ |
| - | args = 95 %{user} | + | args = 95 %{user}\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | warning warn-80 { | + | warning warn-80 {\\ |
| - | quota_storage_percentage = 80 | + | quota_storage_percentage = 80\\ |
| - | execute quota-warning { | + | execute quota-warning {\\ |
| - | args = 80 %{user} | + | args = 80 %{user}\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | #sieve = file: | + | #sieve = file: |
| - | sieve_script_driver = file | + | sieve_script_driver = file\\ |
| - | sieve_script_active_path = ~/ | + | sieve_script_active_path = ~/ |
| - | sieve_script_type = after | + | sieve_script_type = after \\ |
| - | sieve_script_path = / | + | sieve_script_path = / |
| - | protocols = imap lmtp | + | protocols = imap lmtp\\ |
| - | service auth { | + | service auth {\\ |
| - | unix_listener / | + | unix_listener / |
| - | group = postfix | + | group = postfix\\ |
| - | mode = 0660 | + | mode = 0660\\ |
| - | user = postfix | + | user = postfix\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | service lmtp { | + | service lmtp {\\ |
| - | unix_listener / | + | unix_listener / |
| - | group = postfix | + | group = postfix\\ |
| - | mode = 0600 | + | mode = 0600\\ |
| - | user = postfix | + | user = postfix\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | service quota-status { | + | service quota-status {\\ |
| - | executable = quota-status -p postfix | + | executable = quota-status -p postfix\\ |
| - | unix_listener / | + | unix_listener / |
| - | user = postfix | + | user = postfix\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | service quota-warning { | + | service quota-warning {\\ |
| - | executable = script / | + | executable = script / |
| - | unix_listener quota-warning { | + | unix_listener quota-warning {\\ |
| - | group = vmail | + | group = vmail\\ |
| - | mode = 0660 | + | mode = 0660\\ |
| - | user = vmail | + | user = vmail\\ |
| - | } | + | }\\ |
| - | } | + | }\\ |
| - | ssl = required | + | ssl = required\\ |
| - | ssl_server_cert_file = / | + | ssl_server_cert_file = / |
| - | ssl_server_dh_file = / | + | ssl_server_dh_file = / |
| - | ssl_server_key_file = / | + | ssl_server_key_file = / |
| - | ssl_server_prefer_ciphers = server | + | ssl_server_prefer_ciphers = server\\ |
| - | ssl_min_protocol = TLSv1.2 | + | ssl_min_protocol = TLSv1.2\\ |
| - | sql_driver = mysql | + | sql_driver = mysql\\ |
| - | mysql localhost { | + | mysql localhost {\\ |
| - | host = mail_db | + | host = mail_db |
| - | dbname = mailserver | + | dbname = mailserver\\ |
| - | user = mailserver | + | user = mailserver |
| - | password = K6oF4xOZFIo2cYrwTQ03jQWwx7t2my | + | password = K6oF4xOZFIo2cYrwTQ03jQWwx7t2my\\ |
| - | } | + | }\\ |
| - | passdb sql { | + | passdb sql {\\ |
| - | query = SELECT password FROM virtual_users WHERE email=' | + | query = SELECT password FROM virtual_users WHERE email=' |
| - | } | + | }\\ |
| - | userdb sql { | + | userdb sql {\\ |
| query = SELECT email as user, \ | query = SELECT email as user, \ | ||
| concat(' | concat(' | ||
| '/ | '/ | ||
| 5000 AS uid, 5000 AS gid \ | 5000 AS uid, 5000 AS gid \ | ||
| - | FROM virtual_users WHERE email=' | + | FROM virtual_users WHERE email=' |
| - | iterate_query = SELECT email AS user FROM virtual_users | + | iterate_query = SELECT email AS user FROM virtual_users\\ |
| - | } | + | }\\ |
| - | protocol lmtp { | + | protocol lmtp {\\ |
| - | mail_plugins = " quota sieve" | + | mail_plugins = " quota sieve"\\ |
| - | } | + | }\\ |
| - | protocol imap { | + | protocol imap {\\ |
| - | mail_plugins = " quota imap_quota" | + | mail_plugins = " quota imap_quota" |
| - | } | + | }\\ |
| - | #!include conf.d/ | + | #!include conf.d/ |
| ++++ | ++++ | ||
| Line 635: | Line 640: | ||
| ====dovecot logging==== | ====dovecot logging==== | ||
| + | |||
| + | ====dovecot pigeonhole==== | ||
| + | Pigeonhole is the name of the project that adds support for the [[http:// | ||
| ====Dovecot References==== | ====Dovecot References==== | ||
| *Doc Dovecot: | *Doc Dovecot: | ||
| *[[https:// | *[[https:// | ||
| - | *Dovecot 2.3.x | + | *Dovecot 2.4.x |
| + | *[[https:// | ||
| + | ++++Dovecot 2.3.x| | ||
| *[[https:// | *[[https:// | ||
| *[[https:// | *[[https:// | ||
| Line 654: | Line 664: | ||
| *[[http:// | *[[http:// | ||
| *[[https:// | *[[https:// | ||
| + | ++++ | ||
| =====Certificates SSL/ | =====Certificates SSL/ | ||
| Early on, before 2015 there were not many free SSL certificate providers. I used StartSSL for a free certificate. | Early on, before 2015 there were not many free SSL certificate providers. I used StartSSL for a free certificate. | ||
| Line 1023: | Line 1033: | ||
| *[[https:// | *[[https:// | ||
| *[[https:// | *[[https:// | ||
| + | |||
| + | =====exim===== | ||
| + | After updating my VM from Debian 12 to 13 the mailserver container refused to start as it indicated that port 25 was already in use. | ||
| + | |||
| + | It would seem that Debian 13 automatically installed and starts Exim, some kind of system email client. | ||
| + | |||
| + | The solution was simply to stop and disable Exim from running, '' | ||
| + | |||
| + | The method to find the program using the port was the command '' | ||
| + | |||
| + | |||
| =====References===== | =====References===== | ||
| *Workaround.org [[https:// | *Workaround.org [[https:// | ||