我正在尝试在 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
已设置,我也没有看到任何有关 sendmail 的日志/var/log
。
但是,当我尝试在详细模式下使用 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 配置中使用。
你有没有想过可能出了什么问题?
谢谢你们!
答案1
看起来ssmtp
正在尝试进行身份验证而不STARTTLS
先发送命令。通常,当使用端口 587 时,传入连接预计首先发送 plaintext EHLO
,然后发送STARTTLS
if 需要身份验证。
对于 SMTP,在使用端口 465(又名)STARTTLS
时,通常需要直接 TLS,而不需要 -style 启动。smtps
您是否尝试过取消注释该UseSTARTTLS=YES
行?
您的 Docker 映像可能还需要公共 SSL/TLS 根证书,以便ssmtp
在连接到邮件服务器时能够验证邮件服务器的证书。无法这样做还可能导致ssmtp
回退到不加密的连接,如果服务器端配置为“不加密则不进行身份验证”的最佳实践,这可能会在身份验证步骤中失败。
答案2
我已经解决了我的问题。问题是 ssmtp.conf 文件的 Windows 行结尾。
它解释了为什么用户名不正确以及为什么不尊重Debug
标志和标志更改。UseSTARTTLS
非常感谢 @telcoM 提供了一种调试服务器流的方法。