Показать статистику
0 голосов
от (2.9тыс. баллов)

Я пытаюсь соорудить скрипт, который бы переписывал 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? Хелп.

108 просмотров 1 ответов

1 Ответ

0 голосов
от (1.9тыс. баллов)

Попробуйте заменить строку:

stdin=$(</dev/stdin)

на вот это:

stdin=`cat`

Должно работать.

...