我正在尝试在 Docker 映像中设置 ssmtp(用于 sendmail)。
为此,我创建了以下 Dockerfile:
FROM php:7.4-apache
# Install paquet requirements
RUN set -ex; \
# Install required system packages
apt-get update; \
apt-get install -qy --no-install-recommends \
ssmtp \
mailutils \
; \
# Clean aptitude cache and tmp directory
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*;
如您所见,我已经安装了 ssmtp 和 mailutils。
我的 /etc/ssmtp.conf 文件包含我可以使用标准邮件客户端登录到我的帐户的所有凭据:
[email protected]
mailhub=mail.mydomain.com:587
[email protected]
AuthPass=PASS_HERE
FromLineOverride=YES
UseTLS=YES
#UseSTARTTLS=YES
Debug=YES
hostname=OVERRIDEN_HOSTNAME
由于某种原因没有发送邮件。我正在绑定sendmail
命令:
sendmail [email protected]
Subject: aaa
aaa
CTRL+d
并得到错误:
sendmail: Authorization failed (535 Incorrect authentication data)
即使Debug=YES
已设置,我也没有看到任何/var/log
关于 sendmail 的日志。
但是,当我尝试在详细模式下使用 ssmtp 命令时,会生成以下日志:
root@c7e406d765c1:/app# ssmtp -d9 [email protected]
[<-] 220 ****.com ESMTP Exim Fri, 15 Apr 2022 12:25:49 +0200
[->] EHLO ****.com
[<-] 250 HELP
[->] AUTH LOGIN
[<-] 334 VXNl[*** tuncated here ***]
[->] c2Vyd2VyDQ==
[<-] 334 UGFz[*** tuncated here ***]
[<-] 535 Incorrect authentication data
ssmtp: Authorization failed (535 Incorrect authentication data)
这很奇怪,因为相同的凭据(来自配置)例如在 PHPMailer 配置中有效。
你有什么想法可能是错的吗?
谢谢你们!
看起来
ssmtp
正在尝试在不STARTTLS
先发送命令的情况下进行身份验证。通常,当使用端口 587 时,预计传入连接首先发送明文EHLO
,然后需要进行STARTTLS
if 身份验证。使用 SMTP,在使用端口 465(又名)
STARTTLS
时,通常需要没有 -style 启动的直接 TLS 。smtps
您是否尝试取消注释该
UseSTARTTLS=YES
行?您的 Docker 映像可能还需要公共 SSL/TLS 根证书,以便
ssmtp
在连接到它时能够验证邮件服务器的证书。无法这样做还可能导致ssmtp
回退到不加密的连接,如果服务器端配置为“不加密不进行身份验证”的最佳实践,这可能会在身份验证步骤失败。我已经解决了我的问题。问题是 ssmtp.conf 文件的 Windows 行结尾。
它解释了为什么用户名不正确以及为什么不遵守
Debug
标志和标志更改。UseSTARTTLS
非常感谢@telcoM 提供了一种调试服务器流程的方法。