Postfix

支持的字典類型:smtp.gmail.com

  • October 11, 2017

我正在嘗試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

注意:我看到了類似標題的問題,但發布的解決方案對我的設置沒有幫助。

我解決了這個問題,但我不確定是什麼原因造成的。

在安裝過程中,gmail SMTP 伺服器被添加mydestinationmain.cf.

我最終在我的執行以下腳本Dockerfile來修復該值:

sed -i '/mydestination =/d' /etc/postfix/main.cf
echo "mydestination = localhost.localdomain, localhost" >> /etc/postfix/main.cf
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

在這裡,您使用 Berkeley DB 作為Postfix 查找表類型

hash

基於散列的索引文件類型。這僅在支持 Berkeley DB 數據庫的系統上可用。公共數據庫文件使用postmap(1)orpostalias(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. 如果列表不包括hashand btree,則您缺少支持。然後,有關更多資訊,請參閱Postfix Berkeley DB Howto

引用自:https://serverfault.com/questions/877827