Você está redirecionando a saída padrão de sendmail
para o arquivo de log, mas o erro padrão não é redirecionado e, portanto, acaba no arquivo de log do Procmail.
Eu imagino que sendmail
define um código de saída adequado e que você pode simplesmente gerar uma mensagem de devolução local quando falhar, se desejar.
Isso está se tornando complexo o suficiente para que eu crie um script separado, embora o código possa provavelmente ser de alguma forma embutido em seu .procmailout
.
#!/bin/sh
t=$(mktemp -t sendout.XXXXXXXXXXXX) || exit
trap 'rm -f "$t"' EXIT
trap 'exit 123' HUP INT TERM
formail -I "From " >"$t"
sendmail -v -t -X "$@" <"$t" && exit
# If we reached here, it's a failure
rc=$?
( printf "To: $USER\nFrom: MAILER_DAEMON\nSubject: Bounce\n\n"
printf "The following message failed to send. So sorry.\n\n"
cat "$t" ) | sendmail -oi -t
exit $rc
Você poderia enviar este script como sendout
em algum lugar no seu PATH
(verifique se ele também está no PATH
do Procmail) e chamá-lo como
:0
| sendout "$LOGSENDMAIL"
O modo normal de envio de ações no caso de uma mensagem não poder ser entregue imediatamente é enfileirar a mensagem e relatar uma falha temporária após algumas horas, depois repetir até que cerca de uma semana tenha passado e retornar a mensagem como não entregue se ainda não pôde ser entregue. Eu não estou familiarizado com esmtp
, mas parece-me que talvez o comportamento padrão do Sendmail (e, portanto, em algumas configurações Postfix, Exim, etc) talvez seja do seu agrado, então talvez simplesmente mude para um desses (se esmtp
não pode ser configurado para se comportar de maneira semelhante) e evite criar sua própria solução.