Cronjob:从mailutils的Cronjob输出的电子邮件是空的

我正在用我的cronjobs来改变cronjob发送的邮件的发件人和主题。 为了发送电子邮件,我在Ubuntu 14.04上安装了mailutils软件包。

这是我从cronjob发送电子邮件的方式: 0 3 * * * /root/bin/backup.sh 2>&1 | mail -s "Slave1 Backup" -a "From:Slave1<[email protected]>" [email protected] 0 3 * * * /root/bin/backup.sh 2>&1 | mail -s "Slave1 Backup" -a "From:Slave1<[email protected]>" [email protected]

来源: 如何更改来自Cron电子邮件的“From:”字段?

但是,这给我一个空的电子邮件。 运行备份脚本是因为我可以看到所有文件都是最新的,但是电子邮件中没有文本。

如果我将其更改回此,则电子邮件将包含备份脚本的所有输出,如下所示: MAILTO: [email protected] 0 3 * * * /root/bin/backup.sh

我需要做些什么才能让mailutils发送cronjob的输出?

Cronjob看起来不错,我只是改变了邮件工具中的一个参数的地方,它开始发送脚本输出的电子邮件。

 0 3 * * * /root/bin/backup.sh 2>&1 | mail -s "Slave1 Backup" [email protected] -a "From:Slave1<[email protected]>" 

这似乎是我的邮件客户端比cronjob本身更多的问题。 我注意到Thunderbird会在预览通知中正确显示电子邮件文本,当您收到Thunderbird打开的电子邮件时,会popup预览通知。

然而,当点击雷鸟内部的电子邮件时,它是空的,不包含任何文本。 所以我想它可能与一个空的HTML内容有关。 我可以通过将mailutils中的headers参数修改为-a "Content-type: text/html;From:Slave3<[email protected]>"来解决这个问题。

mail命令添加-E参数,意思是“如果主体为空,不要发送任何消息”。

因此,将crontab行更改为:

 0 3 * * * /root/bin/backup.sh 2>&1 | mail -E -s "Slave1 Backup" -a "From:Slave1<[email protected]>" [email protected] 

在我的系统(Arch Linux)中, -a参数似乎没有改变From:地址。 也许crontab行需要改为这个:

 0 3 * * * /root/bin/backup.sh 2>&1 | mail -E -s "Slave1 Backup" -Sfrom='Slave1 <[email protected]>' [email protected] 

编辑:其实,我的mail可执行文件来自s-nail包。 GNU mailutils不支持-E参数,所以我的解决scheme不起作用。

您可以使用heirloom-mailx代替GNU Mailutils。 安装heirloom-mailx软件包并将crontab行修改为:

  0 3 * * * /root/bin/backup.sh 2>&1 | heirloom-mailx -E -s "Slave1 Backup" -Sfrom='Slave1 <[email protected]>' [email protected]