Я пытаюсь настроить postfix
внутри контейнера Docker. При запуске я запускаю следующий сценарий установки:
# Install postfix/mailutils with configuration options
echo "postfix postfix/mailname string $MAILSERVER:587" | debconf-set-selections
echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections
apt-get install -yqq postfix
apt-get install -yqq mailutils
# Setup credentials for SMTP server
mkdir -p /etc/postfix/sasl
touch /etc/postfix/sasl/sasl_passwd /etc/postfix/main.cf
echo "[$MAILSERVER]:587 $EMAIL_USER:$EMAIL_PASSWORD" >> /etc/postfix/sasl/sasl_passwd
chown -R postfix:postfix /etc/postfix
chmod 600 /etc/postfix/sasl/sasl_passwd
postmap /etc/postfix/sasl/sasl_passwd
# Create postfix configuration
echo "relayhost = [$MAILSERVER]:587" >> /etc/postfix/main.cf
echo "smtp_sasl_auth_enable = yes" >> /etc/postfix/main.cf
echo "smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd" >> /etc/postfix/main.cf
echo "smtp_sasl_security_options = noanonymous" >> /etc/postfix/main.cf
echo "smtp_use_tls = yes" >> /etc/postfix/main.cf
echo "debug_peer_list = $MAILSERVER" >> /etc/postfix/main.cf
echo "debug_peer_level = 3" >> /etc/postfix/main.cf
echo "smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt" >> /etc/postfix/main.cf
# Reload postfix for new configurations to take effect
postfix reload
/etc/init.d/postfix restart
После запуска скрипта я получаю следующее в конце моего /etc/postfix/main.cf
:
# Use gmail
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
debug_peer_list=smtp.gmail.com
debug_peer_level=3
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Я подтвердил это /etc/postfix/sasl_passwd
и /etc/ssl/certs/ca-certificates.crt
существуют, но я продолжаю получать:
postfix/bounce[1052]: error: unsupported dictionary type: smtp.gmail.com
Примечание. Я видел вопросы с похожими названиями, но опубликованные решения не помогли с моей настройкой.
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
Здесь вы используете Berkeley DB как Тип таблицы поиска Postfix:
hash
Индексированный тип файла на основе хеширования. Это доступно только в системах с поддержкой баз данных Berkeley DB. Файлы общедоступной базы данных создаются с помощью
postmap(1)
илиpostalias(1)
команда, а частные базы данных обслуживаются демонами Postfix. Имя базы данных, используемое вhash:table
это имя файла базы данных без.db
суффикс.
Следовательно, существование /etc/postfix/sasl_passwd
не так актуально, как наличие /etc/postfix/sasl_passwd.db
, созданный с помощью postmap /etc/postfix/sasl_passwd
. Однако, если вам не хватало этого файла, я считаю, что вместо этого у вас должна быть ошибка, сообщающая об этом напрямую.
Возможно, в вашем Postfix отсутствует поддержка Berkeley DB. В Debian по умолчанию postfix
пакет собран с поддержкой, и вы можете проверить, есть ли он, используя postconf -m
. Если в списке нет hash
и btree
, вам не хватает поддержки. Затем для получения дополнительной информации обратитесь к Постфикс Беркли DB Howto.
Я решил эту проблему, но я не уверен, что ее вызвало.
В процессе установки SMTP-сервер Gmail был добавлен к значению mydestination
в main.cf
.
В итоге я запустил следующий скрипт в своем Dockerfile
чтобы исправить значение:
sed -i '/mydestination =/d' /etc/postfix/main.cf
echo "mydestination = localhost.localdomain, localhost" >> /etc/postfix/main.cf