Я пытаюсь соорудить скрипт, который бы переписывал email-адрес MTA агента nullmailer. Этот MTA агент имеет опцию "allmailfrom", с помощью которой можно поставить email-адрес в /etc/nullmailer/allmailfrom и спокойно себе отправлять почту от этого адреса в "Return-Path". Но у меня не получается заставить это работать. Форма все равно содержит в себе адрес той программы, которая отправляла сообщение - pi@raspberrypi.
Вообщем, я пытался написать скрипт что бы переписать адрес отправителя ("from"). По сути я просто переместил sendmail в другое место (переназвал его как sendmail-bin) и свой скрипт назвал "sendmaill". Из командной строки все работает отлично. Адрес перезаписывается, как мне и нужно. Но через cron ничего не работает.
Я не могу понять почему stdin (стандартный ввод) пустой и крон не отрабатывает как надо. Вот что пишет сислог:
/usr/sbin/sendmail: line 11: /dev/stdin: permission denied
А вот и сам скрипт:
#!/bin/bash
#########################################
#Beginn change here
export NULLMAILER_USER=someuser
export NULLMAILER_HOST=somedomain.org
#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
В кронтабе ничего космического, простая строка:
*/1 * * * * echo proverka
Когда есть оригинальный (настоящий) бинарник sendmail от nullmailer, все отрабатывает как надо. Приходит письмо, в теле которого слово "proverka". Но почему это не работает из крона? Почему этот баш-скрипт не может читать из стандартного ввода stdin? Хелп.