Назад | Перейти на главную страницу

поддерживаемый тип словаря: smtp.gmail.com

Я пытаюсь настроить 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