docker 镜像中的 ssmtp

docker 镜像中的 ssmtp

我正在尝试在 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,然后发送STARTTLSif 需要身份验证。

对于 SMTP,在使用端口 465(又名)STARTTLS时,通常需要直接 TLS,而不需要 -style 启动。smtps

您是否尝试过取消注释该UseSTARTTLS=YES行?

您的 Docker 映像可能还需要公共 SSL/TLS 根证书,以便ssmtp在连接到邮件服务器时能够验证邮件服务器的证书。无法这样做还可能导致ssmtp回退到不加密的连接,如果服务器端配置为“不加密则不进行身份验证”的最佳实践,这可能会在身份验证步骤中失败。

答案2

我已经解决了我的问题。问题是 ssmtp.conf 文件的 Windows 行结尾。

它解释了为什么用户名不正确以及为什么不尊重Debug标志和标志更改。UseSTARTTLS

非常感谢 @telcoM 提供了一种调试服务器流的方法。

相关内容