我尝试编写一个从 nullmailer 的地址覆盖的小脚本。Nullmailer 有一个选项“allmailfrom”,您可以将邮件地址放入 /etc/nullmailer/allmailfrom,所有发送的邮件都将此地址作为“Return-Path”,但 From 仍然是发送程序的值,例如 pi@raspberrypi
所以我尝试创建一个小脚本来重写发件人地址。基本上,您将 sendmail 移动到 sendmail-bin 并将创建的脚本命名为 sendmail。它与命令“mail”一起工作,地址被重写。但是使用 cron 它不起作用。STDIN 为空,因此无法通过电子邮件接收到 cron 的输出。系统日志写入
/usr/sbin/sendmail: line 11: /dev/stdin: permission denied
这里是脚本。
#!/bin/bash
#########################################
#Beginn change here
export NULLMAILER_USER=user
export NULLMAILER_HOST=somedomain.com
#Ende change here
#############################################
export NULLMAILER_FLAGS=ft
stdin=$(</dev/stdin)
optPosition=0 #defaultvalue when not found
while getopts ":f:" from; do
case $from in
f) optPosition=$OPTIND
break
;;
esac
done
arguments=($@)
if (($optPosition != 0)); then #-f Option was used
arguments[(($optPosition-2))]=$NULLMAILER_USER@$NULLMAILER_HOST
set -- "${arguments[@]}"
fi
echo "$stdin" | /usr/sbin/sendmail-bin "$@"
带有 NULLMAILER_HOST 和 NULLMAILER_FLAGS=f 的 NULLMAILER_USER 告诉 nullmailer 将其用作发件人地址。该部分有效,请参阅http://manpages.ubuntu.com/manpages/trusty/man1/nullmailer-inject.1.html
在 crontab 中只是
*/1 * * * * echo test
当 nullmailer 的原始 sendmail 存在时,“test”就在邮件的正文中,这是它应该的。那么为什么不能从标准输入读取这个 bash 脚本呢?
换行
和
它有效。答案的灵感来自https://stackoverflow.com/questions/212965/how-to-read-mutliline-input-from-stdin-into-variable-and-how-to-print-one-out-in
不知道为什么这会产生如此大的不同,重要的是它有效。