我在使用 cron 发送电子邮件时遇到了一些麻烦。我的 ISP 要求“发件人:”字段与发送电子邮件的电子邮件地址相匹配,否则电子邮件将被拒绝。由于 cron 将“发件人:”字段硬编码为“root(Cron Daemon)”,因此不会发送这些电子邮件。
我已经设置了 msmtp 并且可以从命令行毫无问题地发送电子邮件。事实上,我已经将我的一些 cron 作业包装在一个发送电子邮件本身的脚本中。这工作正常,但我想要一个更优雅的解决方案。
我最初使用的是包msmtp-mta
,它只是符号链接/usr/lib/sendmail
,/usr/bin/msmtp
以便 cron 使用 msmtp 发送电子邮件。由于这不起作用,我删除了该包并放入了一个 bash 脚本,/usr/lib/sendmail
该脚本应该只从标准输入中读取并发送带有正确标题的电子邮件:
#!/bin/bash
HEADERS="To: <myemail>
From: Cron <myotheremail>
Subject: Vixie-cron snooper ($@)
"
INPUT=$( cat /dev/stdin )
echo -e "$HEADERS""Stdin:\n$INPUT\n" | msmtp <myemail>
echo "$HEADERS""Stdin:\n$INPUT\n" > /tmp/vixielog
Run Code Online (Sandbox Code Playgroud)
然而,这并没有达到预期的效果。我刚刚收到一封几乎是空的电子邮件,/tmp/vixielog
内容相同:
To: <myemail>
From: Cron <myotheremail>
Subject: Vixie-cron snooper (-i -FCronDaemon -oem <myemail>)
Stdin:
Run Code Online (Sandbox Code Playgroud)
电子邮件来得正是时候,所以我知道 cron 作业正在正常运行,但我没有得到输出。我如何调整这种方法以在电子邮件中获取命令的输出?
最终我得出了以下解决方案。mstmp-mta
我没有使用,而是编写了自己的简单 bash 脚本,充当我的 MTA。放置在 中/usr/sbin/sendmail
,它替换 From 标头并发送电子邮件。
#!/bin/bash
sed -e "s/From: root (Cron Daemon)/From: WHATEVER YOU LIKE/" | msmtp $BASH_ARGV
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助任何想要轻量级解决方案的人。
归档时间: |
|
查看次数: |
2665 次 |
最近记录: |