首先,我成功配置了一个有效的 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 protected]: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
答案1
您的配置:
smtp_sasl_password_maps = static:Domain\[email protected]:password
是错的。
文档内容如下:http://www.postfix.org/postconf.5.html#smtp_sasl_password_maps
smtp_sasl_password_maps(默认值:空)
可选的 Postfix SMTP 客户端查找表,每个发件人、远程主机名或下一跳域都有一个用户名:密码条目。仅当启用了发件人相关身份验证时才会进行每个发件人的查找。如果未找到用户名:密码条目,则 Postfix SMTP 客户端不会尝试向远程主机进行身份验证。
Postfix SMTP 客户端在进入 chroot jail 之前会打开查找表,因此您可以将密码文件留在 /etc/postfix 中。
指定零个或多个“type:name”查找表,以空格或逗号分隔。将按指定顺序搜索表,直到找到匹配项。
要了解查找表,请查看关于表格的 Postfix 文档
因此,您可能需要创建一个包含您的 Exchange 服务器凭据的文件,对其进行 postmap 以构建哈希数据库,并将 smtp_sasl_password_maps 指令指向该文件。
- 创建文件 /etc/postfix/sasl_password 并使其内容如下(修改明显的部分):
[你的 Exchange 服务器]:587 [电子邮件保护]:密码
[] 表示您不想在主机上执行 mx 查找,587 是提交端口。请修改以满足您的要求。
此文件包含凭证,请保护好它,至少它不应被所有人读取。理想情况下,只有 root 可以读取/写入它。
对 sasl_password 文件进行后映射:
# postmap hash:/etc/postfix/sasl_password [enter]
这将创建一个供 postfix 使用的哈希数据库文件 /etc/postfix/sasl_password.db。
修改你的main.cf:
smtp_sasl_password_maps = 哈希:/etc/postfix/sasl_passwd
重新启动 postfix 服务(取决于您的操作系统,如果您不知道如何操作,请重新启动服务器)。测试它是否有效。