Eu tento escrever um pequeno script que substitui o endereço do nullmailer. Nullmailer tem uma opção "allmailfrom" você pode colocar um endereço de e-mail em /etc/nullmailer/allmailfrom e todos os e-mails enviados têm este endereço como "Return-Path", mas From ainda é o valor de enviar programa como pi@raspberrypi
Então eu tentei criar um pequeno script para reescrever o endereço do remetente. Basicamente você move o sendmail para sendmail-bin e nomeia o script criado como sendmail. Funciona com o comando "mail", o endereço é reescrito como deveria. No entanto, com o cron, não funciona. STDIN está vazio e, portanto, a saída do cron não é recebida por e-mail. Gravações de syslogs
/usr/sbin/sendmail: line 11: /dev/stdin: permission denied
Aqui o roteiro.
#!/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 "$@"
O NULLMAILER_USER com NULLMAILER_HOST e NULLMAILER_FLAGS=f dizem ao nullmailer para usar isso como o endereço de origem. Essa parte funciona, veja http://manpages.ubuntu.com/manpages/trusty/man1/nullmailer-inject.1.html
No crontab é apenas
*/1 * * * * echo test
Quando o sendmail original de nullmailer está presente, então "teste" está no corpo do e-mail, como deveria. Então, por que não pode ler esse script bash do stdin?
substituir linha
com
e funciona. A resposta foi inspirada em https://stackoverflow.com/questions/212965/how-to-read-mutliline-input-from-stdin-into-variable-and-how-to-print-one-out-in
Não sei porque isso faz tanta diferença, importante que funcione.