配置 Postfix 使用 Exchange 2013 SMTP 服务器发送邮件时出现问题

配置 Postfix 使用 Exchange 2013 SMTP 服务器发送邮件时出现问题

首先,我成功配置了一个有效的 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 服务(取决于您的操作系统,如果您不知道如何操作,请重新启动服务器)。测试它是否有效。

相关内容