Postfix

配置 Postfix 以使用 Exchange 2013 SMTP 伺服器發送郵件時出現問題

  • July 17, 2016

首先,我成功配置了一個有效的 Postfix 配置以使用 SendGrid SMTP 發送郵件。

現在我修改配置以使用 Exchange 2013 SMTP 伺服器發送郵件。

我查看了許多論壇,但找不到什麼不起作用。每次我嘗試發送郵件時,我在 mail.log 中都有:SASL Authentication failed; server XXX.XXX.XXX.XXX[XXX.XXX.XXX.XXX] said: 535 5.7.3 Authentication unsuccessful

這是 main.cfg :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific: Specifying a file name will cause the first 
# line of that file to be used as the name. The Debian default 
# is /etc/mailname. 
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) 
biff = no

# appending .domain is the MUA's job. 
append_dot_mydomain = no

# Uncomment the next line to generate “delayed mail” warnings 
#delay_warning_time = 4h

readme_directory = no

# TLS parameters 
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem 
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key 
smtpd_use_tls=yes 
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for 
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination 
myhostname = MYNAME 
alias_maps = hash:/etc/aliases 
alias_database = hash:/etc/aliases 
mydestination = MYNAME, localhost.localdomain, localhost 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 
mailbox_command = procmail -a “$EXTENSION” 
mailbox_size_limit = 51200000 
recipient_delimiter = + 
inet_interfaces = loopback-only 
default_transport = smtp 
relay_transport = smtp 
inet_protocols = ipv4 
myorigin = /etc/mailname 
# enable SASL authentication

smtp_sasl_auth_enable = yes 
smtp_sasl_password_maps = static:Domain\email@domain.fr:password 
smtp_sasl_security_options = noanonymous 
smtp_tls_security_level = encrypt 
header_size_limit = 4096000 
relayhost = XXX.XXX.XXX.XXX:587 
#smtp_tls_security_level=none

你的配置:

smtp_sasl_password_maps = static:Domain\email@domain.fr:password

是錯的。

文件是:http ://www.postfix.org/postconf.5.html#smtp_sasl_password_maps

smtp_sasl_password_maps(預設值:空)

帶有一個使用者名的可選 Postfix SMTP 客戶端查找表:每個發件人的密碼條目、遠端主機名或下一跳域。僅當啟用了與發件人相關的身份驗證時,才會進行每個發件人的查找。如果未找到使用者名:密碼條目,則 Postfix SMTP 客戶端將不會嘗試對遠端主機進行身份驗證。

Postfix SMTP 客戶端在進入 chroot 監獄之前會打開查找表,因此您可以將密碼文件留在 /etc/postfix.xml 中。

指定零個或多個“type:name”查找表,以空格或逗號分隔。將按指定順序搜尋表,直到找到匹配項。

要了解查找表,請查看表上的後綴文件

因此,您可能需要使用您的交換伺服器憑據創建一個文件,對其進行後映射以建構雜湊數據庫並將 smtp_sasl_password_maps 指令指向該文件。

  • 使用此內容創建文件 /etc/postfix/sasl_password (修改明顯的位):

$$ your.exchange.server $$:587 使用者名@domain.tld:密碼 這

$$ $$表示您不想在主機上執行 mx 查找,587 是送出埠。修改以滿足您的要求。 這個文件包含憑據,保護它,至少它不應該是世界可讀的。理想情況下,只有 root 應該讀/寫它。

  • postmap sasl_password 文件:
# postmap hash:/etc/postfix/sasl_password [enter]

這將創建一個雜湊數據庫文件 /etc/postfix/sasl_password.db 後綴將使用該文件。

修改你的 main.cf:

smtp_sasl_password_maps = 雜湊:/etc/postfix/sasl_passwd

重新啟動後綴服務(取決於您的作業系統,如果您不知道如何執行此操作,請重新啟動伺服器)。測試它是否有效。

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