Я пытаюсь написать небольшой скрипт, который перезаписывается с адреса nullmailer. У Nullmailer есть опция «allmailfrom», вы можете поместить адрес электронной почты в / etc / nullmailer / allmailfrom, и все отправленные письма будут иметь этот адрес как «Return-Path», но From по-прежнему является значением, поэтому отправляющая программа, такая как pi @ raspberrypi
Итак, я попытался создать небольшой скрипт, чтобы переписать адрес from. Обычно вы перемещаете sendmail в sendmail-bin и называете созданный скрипт sendmail. Работает с командой "почта", адрес переписывается как надо. Однако с 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_USER с NULLMAILER_HOST и NULLMAILER_FLAGS = f говорят nullmailer использовать это как адрес отправителя. Эта часть работает, см. http://manpages.ubuntu.com/manpages/trusty/man1/nullmailer-inject.1.html
В crontab просто
*/1 * * * * echo test
Когда присутствует исходный sendmail nullmailer, тогда "test" находится в теле письма, как и должно быть. Так почему же нельзя прочитать этот сценарий bash из стандартного ввода-вывода?
заменить строку
stdin=$(</dev/stdin)
с участием
stdin=`cat`
и это работает. Ответ был вдохновлен https://stackoverflow.com/questions/212965/how-to-read-mutliline-input-from-stdin-into-variable-and-how-to-print-one-out-in
Не знаю, почему это так важно, важно, что это работает.