Produz mensagem de rejeição quando o Sendmail falha

1

Estou tentando receber uma mensagem de e-mail devolvido quando uma mensagem de saída não pode acessar o servidor externo smtp (devido a meus problemas de conexão com a Internet local).

Eu envio e-mails usando: mutt (compor) - procmail - esmtp (no lugar do sendmail) - GMail smtp server

Quando minha conexão está inativa e o smtp do gmail não pode ser acessado, preciso ser alertado com um e-mail devolvido do meu sistema local de e-mail.

O procmail é o "link na cadeia" correto para configurar esse comportamento? Como configurá-lo para saltar?

EDITAR:

.muttrc :

set sendmail="/usr/bin/formail -s /usr/bin/procmail -t -m /home/$myuser/.procmailoutrc"

.procmailoutrc :

MAILCONF=$HOME/.mail
LOGFILE=$MAILCONF/procmailout.log
LOGSENDMAIL=$MAILCONF/esmtp.log 
[...]
:0
* ^From.*address@gmail
{
        :0c:
        address@gmail
        :0
        | formail -I 'From ' | sendmail -v -t -X "$LOGSENDMAIL"
}

esmtprc :

identity address@gmail
        hostname smtp.gmail.com:587
        username "address@gmail"
        password "*"
        starttls required
        helo "*"
mda='/usr/bin/formail -a "Date: 'date -R'" | /usr/bin/procmail -d %T''

Desde que encontrei o seguinte erro:

"SMTP server problem Temporary failure in name resolution"

escrito em $LOGFILE e não em $LOGSENDMAIL , achei que o procmail conseguiu gerenciar esse erro retornado e enviar uma mensagem de "falha na entrega" para minha caixa de correio.

Como você pode ver na minha configuração, o nome mboxes é o mesmo do endereço de e-mail real ...

    
por Joe 05.04.2016 / 01:11

1 resposta

0

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.

    
por 05.04.2016 / 12:14