Docker

docker 鏡像中的 ssmtp

  • April 20, 2022

我正在嘗試在 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 文件包含我可以使用標準郵件客戶端登錄到我的帳戶的所有憑據:

root=serwer@mydomain.com

mailhub=mail.mydomain.com:587
AuthUser=serwer@mydomain.com
AuthPass=PASS_HERE

FromLineOverride=YES

UseTLS=YES
#UseSTARTTLS=YES
Debug=YES

hostname=OVERRIDEN_HOSTNAME

由於某種原因沒有發送郵件。我正在綁定sendmail命令:

sendmail my_email@example.com
Subject: aaa
aaa
CTRL+d

並得到錯誤:

sendmail: Authorization failed (535 Incorrect authentication data)

即使Debug=YES已設置,我也沒有看到任何/var/log關於 sendmail 的日誌。

但是,當我嘗試在詳細模式下使用 ssmtp 命令時,會生成以下日誌:

root@c7e406d765c1:/app# ssmtp -d9 my_email@example.com
[<-] 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.conf 文件的 Windows 行結尾。

它解釋了為什麼使用者名不正確以及為什麼不遵守Debug標誌和標誌更改。UseSTARTTLS

非常感謝@telcoM 提供了一種調試伺服器流程的方法。

看起來ssmtp正在嘗試在不STARTTLS先發送命令的情況下進行身份驗證。通常,當使用埠 587 時,預計傳入連接首先發送明文EHLO,然後需要進行STARTTLSif 身份驗證。

使用 SMTP,在使用埠 465(又名)STARTTLS時,通常需要沒有 -style 啟動的直接 TLS 。smtps

您是否嘗試取消註釋該UseSTARTTLS=YES行?

您的 Docker 映像可能還需要公共 SSL/TLS 根證書,以便ssmtp在連接到它時能夠驗證郵件伺服器的證書。無法這樣做也可能導致ssmtp回退到不加密的連接,如果伺服器端配置為“不加密不進行身份驗證”的最佳實踐,這可能會在身份驗證步驟失敗。

引用自:https://unix.stackexchange.com/questions/699528