Cron 作业输出 HTML;如何以 HTML 格式发送邮件

Cron 作业输出 HTML;如何以 HTML 格式发送邮件

我有一个 cron 作业,如果失败,则输出 HTML。如果成功,则不输出任何内容,在这种情况下,我不会收到任何邮件。如果它失败并输出 HTML,cron 会向我发送邮件,但邮件以纯文本形式发送,难以阅读。

我想出了两个部分解决方案,但还没有弄清楚如何让它真正发挥作用。第一个是让我的作业在输出顶部打印 MIME 说明符,如下所示:

Mime-Version: 1.0
Content-Type: text/html
<html>...

然后我在 cron 中像这样运行它:

my-job | sendmail my.name

这样做的主要问题是,即使没有任何文本,我也会收到邮件。第二个问题是,我必须将 MIME 类型行添加到我的脚本中,而这似乎不太合适(不太优雅,但也许可以忍受)。

然后我尝试使用mail或,如果没有文本,mailx则可以选择跳过发送:-E

my-job | mail -E my.name

这基本上就是 cron 默认所做的。但是我找不到任何方法来使用 mail/mailx 设置 MIME 类型!网上的一些参考资料说这是使用选项完成的-a,但在我的系统 (Fedora 16) 上,它mail -a采用的是附件文件名,而不是标题行,就像Content-Type: text/html在其他一些系统上一样。

我不想创建临时文件、检查其大小等。我想我想要其中之一:

  • 使 cron 邮件可读为 HTML 的一种方法。
  • 使 sendmail 跳过空消息。
  • 在 mailx 中设置 MIME 类型。
  • 其他一些方法是使用 Fedora 上默认安装的不同程序。

答案1

不要在命令行上指定收件人,而是使用 调用 sendmail-t并让脚本生成to:标题。(您也可以subj:在执行此操作时生成标题。)这样,当没有输出时,就没有收件人,因此也就没有邮件。

答案2

最简单的方法是在脚本中调用 sendmail fom。这样你就可以控制是否向你发送邮件。

或者,你可以让你的脚本返回成功代码,如果它失败并且仅当脚本“正确”退出时才运行 sendmail:

$ my-job >/tmp/message && cat /tmp/message | sendmail 

告诉&&bash 仅当第一个命令成功退出时才运行下一个命令(exit 0在 BASH 或exit(0)PERL 中)。通过告诉脚本在失败时以状态 0 退出,您将使 sendmail 命令仅在失败时运行。

答案3

您可以按如下方式指定内容类型:

mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"

相关内容