是否可以在 Dockerfile 中设置 msmtp 以进行正确的身份验证?

是否可以在 Dockerfile 中设置 msmtp 以进行正确的身份验证?

我正在运行 php:7.2-apache 容器,我想发送邮件。由于 ssmtp 已退役,我想使用 msmtp,但我在使用 msmtp 时遇到身份验证问题。

我的目标:为 Docker 容器设置 msmtp,以便容器可以立即使用(即无需我执行进入容器并设置一些系统)

根据msmtp 手册页,msmtp 提供了几种身份验证方法,但它们似乎都无法实现我的目标:

  1. 带秘密工具的钥匙圈:此工具需要 X11 显示,因此不能在 Dockerfile 中使用
  2. 使用 gpg 加密文件:gpg 的初始化和使用 gpg 的加密需要用户交互,因此不能在 Dockerfile 中使用(这里我不是 100% 确定)
  3. 纯文本密码:除了此选项不如其他选项安全之外,还有一个问题,即我的邮件服务器拒绝使用此选项的 msmtp 授权。我的邮件服务器配置为允许login plain(我用 进行了测试telnet),但不知何故,msmtp 传输的是 base64 字符串“username\0password”,而不是“username\0username\0password”,我在身份telnet验证中成功使用了后者。我不知道这是 msmtp 中的错误,还是仅仅是不同的协议或其他原因。如果您知道如何在 msmtp 中改变这种行为,这也将会很棒!
  4. 通过命令行输入密码:这不是我想要的,因为服务器应该自行向客户发送邮件。

如果有人有解决方法,或者我目前没有看到的方法,我将非常感激!

PS:我想使用 msmtp 将邮件从一个 docker 容器传输到另一个托管我的邮件服务器的 docker 容器,这可能很有趣。它们位于同一个 docker 网络中,无法从外部访问。此外,邮件服务器容器仅监听 docker 桥接器并且仅用于发送。如果这能以某种方式简化事情,比如“那么你就不需要身份验证的安全性并且可以执行 xy”,我也会非常高兴 :)

答案1

当我再次查看手册页时,我找到了一个解决方案。在情况 3 中,msmtp 提供了几种不同的身份验证方法。纯文本密码。对我来说方法login表述如下(在配置文件中:auth login而不是auth on)。

由于容器之间的连接使用 TLS 进行保护,因此我对此选项感到满意。不过,如果您有更好的选择,请告诉我!

相关内容