告诉来宾操作系统使用我的 dockerized 邮件服务器发送电子邮件

告诉来宾操作系统使用我的 dockerized 邮件服务器发送电子邮件

我在 Docker 容器中运行了 postfix。 cronjob 尝试发送电子邮件,但回复

“(CRON) info (No MTA installed, discarding output)” error in the syslog

根据这个关联,解决方案是安装postfix,以便CRON可以发送电子邮件。

我在这台主机上运行了 postfix,有办法使用它吗?我有一些其他主机,并且 postfix 没有在它们上运行,我也可以告诉它们使用远程 docker 邮件服务器吗?

答案1

问题不是 postfix 没有运行,而是它应该侦听主机上的映射端口 25 或 587。即使是这种情况,如果主机上没有安装 postfix,则可能没有安装将邮件(从标准输入或命令行参数获取)发送到端口的安装程序。

您安装客户端程序sSMTP或者邮件传输协议为此,但我已经在我正在使用的 crontab 条目的一个小包装程序中解决了这个问题。仅当程序(它称为“真正的”crontab etnry)以非零退出值退出或其输出包含字符串“error:”时,包装器才会发送邮件。这减少了我自己的系统的跨度,即如果程序运行良好则不会收到电子邮件。该程序使用Python标准库smtp模块发送捕获的输出。

包装器使用 运行程序subprocess.check_output(cmd, stderr=subprocess.STDOUT),并使用以下命令发送错误结果:

 smtp = smtplib.SMTP(host="", port=0)  # by default 'localhost' and 25
 smtp.connect()
 smtp.sendmail(
     from_email, to_email_list,
     email_header_and_body
 )

通过设置主机和端口,我还使用它来运行来自其他 Docker 容器的作业。

相关内容