我有一台运行 exim4 的 Debian8 服务器,它通过 NameCheap 的 mail.privateemail.com smtp 服务器通过智能主机发送外发邮件 - 或者至少以前是这样。最近更新后,服务器不再接受端口 25 上的连接。我已将 exim 重新配置为使用端口 587,但无法发送任何邮件。
问题似乎发生在 STARTTLS 握手期间。初始连接成功,服务器发送其 220 响应,exim 客户端发送其 ELHO 命令,服务器提供 250 STARTTLS 选项。此时,exim 不会回复 STARTTLS 并建立安全连接,而是开始发送消息头。对此,服务器发送 530“必须先发出 STARTTLS 命令”,并且消息传递尝试中止。以下是强制传递冻结消息的调试输出片段exim -d -M
:
Transport port=25 replaced by host-specific port=587
Connecting to mail.privateemail.com [198.54.122.60]:587 ... connected
waiting for data on socket
read response data: size=32
SMTP<< 220 PrivateEmail.com Mail Node
198.54.122.60 in hosts_avoid_esmtp? no (option unset)
SMTP>> EHLO efserver.hellonull.com
waiting for data on socket
read response data: size=22
SMTP<< 250-STARTTLS
250 OK
198.54.122.60 in hosts_require_tls? no (option unset)
198.54.122.60 in hosts_avoid_pipelining? no (option unset)
not using PIPELINING
198.54.122.60 in hosts_require_auth? no (option unset)
SMTP>> MAIL FROM:<>
waiting for data on socket
read response data: size=41
SMTP<< 530 Must issue a STARTTLS command first
ok=0 send_quit=1 send_rset=1 continue_more=0 yield=0 first_address is not NULL
SMTP>> QUIT
之前在端口 25 上一切都运行正常。此外,我可以使用配置为使用相同服务器、端口和 STARTTLS 的 IceDove 发送外发邮件。有人能解释一下为什么 exim 似乎忽略了服务器提供的 STARTTLS 吗?
答案1
您可以通过hosts_require_tls
在配置中添加列表中包含智能主机的选项来解决此问题。这将导致 Exim 发送 STARTTLS 命令来建立 TLS 连接。但是,该hosts_avoid_tls
选项可能会覆盖该设置。
您可能想要尝试使用端口 465 (SSMTP)。T 据记录,它支持传入流量。它支持传出流量。我已测试将智能主机定义为example.com:ssmtp
而不是example.com
。
答案2
我很高兴地报告问题已解决。问题似乎出在 NameCheap 的 privateemail 服务上。我今天再次开始处理这个问题,在dpkg-reconfigure exim4-config
使用与以前相同的设置后,我能够通过 mail.privateemail.com:587 发送外发邮件。我不需要更改 exim 配置中的任何特殊选项。SMTP 对话显示 privateemail.com 服务器现在对 SMTP 连接做出正常响应。我认为 NameCheap 的更新解决了这个问题。
SMTP>> EHLO efserver.hellonull.com
SMTP<< 250-MTA-08.privateemail.com
250-PIPELINING
250-SIZE 81788928
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
SMTP>> AUTH PLAIN ********************************************
SMTP<< 235 2.7.0 Authentication successful