Part 1. Введение.
Part 2. DBMail.
Part 3. Postfix.
Part 4. SASL.
Part 5. SPF. DKIM. DMARC. Очистка заголовков. DNS PTR.
Установите postfix выбрав опцию No configuration.
apt install postfix
Отредактируйте конфиг /etc/postfix/main.cf.
mydomain = somewhere-in-the.space
myhostname = mail.somewhere-in-the.space
#disable /etc/aliases files lookup, all users are stored inside DB
alias_maps =
alias_database =
mydestination = $mydomain, localhost, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_banner = $myhostname ESMTP
biff = no
compatibility_level = 2
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.somewhere-in-the.space/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.somewhere-in-the.space/privkey.pem
smtp_use_tls=yes
smtp_tls_security_level=may
smtpd_use_tls=yes
smtpd_tls_security_level=encrypt
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Отредактируйте файл /etc/postfix/master.cf и добавьте следующую строку в конец. Это включит использование TLS на порте 587.
submission inet n - y - - smtpd
Отредактируйте файл /etc/letsencrypt/cli.ini, чтобы postfix перезапускался после каждого обновления сертификатов.
post-hook = /bin/chmod -R 640 /etc/letsencrypt/archive/ > /dev/null 2>&1 && /bin/systemctl restart dbmail && /bin/systemctl restart postfix
Postfix может быть сконфигурирован на использование SMTP или LMTP протоколов. Оффициальные мануалы DBMail перестали быть актуальными, поэтому воспользуйтесь моими. Выберите один из вариантов и продолжите.
Вариант 1. SMTP.
Простейший вариант. Postfix’у не нужно подключение к БД для проверки пользователей, но процесс dbmail-deliver (ранее dbmail-smtp), в отличие от LMTP, будет создавать подключение к БД для каждого входящего письма — это уменьшает производительность сервера по сравнению с LMTP.
Добавьте следующие строки в файл /etc/postfix/master.cf.
dbmail-smtp unix - n n - - pipe
flags= user=dbmail:dbmail
argv=/usr/sbin/dbmail-deliver -f /etc/dbmail/dbmail.conf -d ${recipient} -r ${sender}
Добавьте следующие строки в файл /etc/postfix/main.cf.
mailbox_transport = dbmail-smtp: local_recipient_maps =
Вариант 2. LMTP.
Включите демон DBMail LMTP в файле /etc/default/dbmail.
START_LMTPD=true
Добавьте следующие строки в файл /etc/dbmail/dbmail.conf.
[LMTP] port = 24
Перезапустите DBMail чтобы демон LMTP стартанул.
systemctl restart dbmail
Установите расширение postfix для подключения к PostgreSQL.
apt install postfix-pgsql
Добавьте следующую строку в файл /etc/postfix/master.cf.
dbmail-lmtp unix - - n - - lmtp
Создайте файл /etc/postfix/recipient_map.cf.
user = dbmail password = db_user_password hosts = 127.0.0.1:5432 dbname = dbmail query = SELECT DISTINCT 1 FROM dbmail_aliases WHERE alias='%s';
Добавьте следующие строки в файл /etc/postfix/main.cf.
mailbox_transport = dbmail-lmtp:127.0.0.1:24 local_recipient_maps = pgsql:/etc/postfix/recipient_map.cf
И в конце.
Перезапустите postfix.
systemctl restart postfix
Проверьте что порты открыты.
netstat -atun | grep "25\|587"
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp6 0 0 :::587 :::* LISTEN tcp6 0 0 :::25 :::* LISTEN
Попробуйте отправить тестовое письмо куда-нибудь наружу.
apt-get install mailutils echo "test" | mail -aFrom:admin@somewhere-in-the.space your@mail.com
ОК, теперь вы можете отправлять письма прямо с сервера, но давайте настроим SASL, чтобы иметь возможность безопасно отправлять почту отовсюду.

Absolute gold. Thank you so much for assembling some outstanding documentation!