我在 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 容器的作业。