如何从Vixie-cron(debian)和msmtp自定义电子邮件标题?

我得到了cron发送邮件的一些麻烦。 我的ISP要求“From:”字段与发送电子邮件的电子邮件地址相匹配,否则电子邮件将被拒绝。 当cron将“From:”字段硬编码为“root(Cron Daemon)”时,这些电子邮件不会被发送。

我已经设置了msmtp,并且可以从命令行发送没有问题的电子邮件。 实际上,我已经将一些cron作业包装在发送电子邮件的脚本中。 这工作正常,但我想要一个更优雅的解决scheme。

我原来使用的是msmtp-mta ,它将/usr/lib/sendmail符号链接到/usr/bin/msmtp以便cron使用msmtp发送电子邮件。 由于这样做没有奏效,我删除了这个包,并在/usr/lib/sendmail放了一个bash脚本,而不是只读标准input并发送一个正确的邮件头:

 #!/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 

但是,这并没有达到预期的效果。 我只收到一封几乎空的电子邮件,而/tmp/vixielog包含相同的信息:

 To: <myemail> From: Cron <myotheremail> Subject: Vixie-cron snooper (-i -FCronDaemon -oem <myemail>) Stdin: 

电子邮件是在正确的时间,所以我知道cron工作正在正常运行,但我没有得到输出。 我怎样才能调整这个方法来获得电子邮件中命令的输出?

最终我来到以下解决scheme。 我没有使用mstmp-mta ,而是写了自己简单的bash脚本,充当我的MTA。 放在/usr/sbin/sendmail ,它取代了From标题并发送邮件。

 #!/bin/bash sed -e "s/From: root (Cron Daemon)/From: WHATEVER YOU LIKE/" | msmtp $BASH_ARGV 

希望这可以帮助任何想要轻量级解决scheme的人。

我为系统邮件做了小小的包装,它parsing/ etc / aliases并以正确的格式(通过/ usr / sbin / sendmail)发送邮件:

 #!/bin/bash stdin=$(cat) mail=$(echo "$stdin" | sed "s/From: root (Cron Daemon)/From: ${4} ${4}@domain.com/g") if [ -f /etc/aliases ]; then if [ "grep ${1} /etc/aliases" != "" ]; then exec < /etc/aliases while read line do if [[ $line =~ ^${1}:\ (.*)$ ]] ; then addr=${BASH_REMATCH[1]} else if [[ $line =~ ^default:\ (.*)$ ]] ; then addr=${BASH_REMATCH[1]} fi fi done echo $addr fi else addr="[email protected]" fi mail=$(echo "$mail" | sed "s/To: ${4}/To: ${addr} /g") echo -e "$mail" | msmtp --auto-from=on --read-envelope-from --maildomain=domain.com -t 

只需更改默认邮件和邮件域