Posso enviar e-mails em segundo plano no Mutt enquanto ainda estou sendo notificado de erros?

2

Removendo o atraso de envio do mutt

Eu originalmente usei o SMTP MTA interno do mutt. No entanto, há uma pausa considerável depois de acertar enviar. Isso pode ser desabilitado usando um MTA externo com set sendmail_wait=-1 em muttrc .

No entanto, se eu usar msmtp como o MTA, não haverá notificação de erros (embora msmtp grave em logfile , conforme especificado em ~/.msmtprc ).

Tentativa de receber notificações

Na linha de comando, posso acionar um comando quando msmtp falha.

</tmp/tosend msmtp -a default [email protected] --read-envelope-from || echo failed

Concebivelmente, eu poderia enviar uma notificação de falha para o meu correio * nix local. No entanto, isso não parece funcionar no mutt, se eu definir o seguinte em muttrc .

set sendmail = "/usr/bin/msmtp || date >> /tmp/msmtp.fail"

Isso faz com que todos os emails não sejam enviados silenciosamente, com o seguinte erro em msmtp ' logfile .

Nov 05 10:53:09 host=mail.bar.com tls=on auth=on [email protected] [email protected] recipients=||,date,>>,/tmp/msmtp.fail,[email protected] smtpstatus=501 smtpmsg='501 #5.1.1 bad address ' errormsg='recipient address >> not accepted by the server' exitcode=EX_DATAERR

Obviamente, mutt está analisando as partes extras do comando como destinatários.

Pergunta

Existe uma maneira de receber notificações de e-mails enviados que falham ao enviar em segundo plano? Eu não estou amarrado a msmtp necessariamente.

    
por Sparhawk 05.11.2015 / 01:17

3 respostas

3

Escreva um pequeno shell script para usar como um valor "sendmail". Por exemplo, configure ~/.muttrc com

set sendmail = /home/yourid/bin/mymuttsendmail

e em mymuttsendmail colocar algo como

#!/bin/bash
tmp=$(mktemp /tmp/mymutt.XXXXXX)
cat >$tmp
( if ! msg=$(msmtp "$@" <$tmp 2>&1)
  then zenity --error --text "$msg"
  fi 
  rm $tmp
) &
exit 0

e chmod +x este arquivo. Lembre-se que este script será chamado com os destinatários como argumentos extras, que passamos para msmtp com "$@" , e o email será em stdin, que copiamos imediatamente em um arquivo temporário para, em seguida, fornecer para msmtp . Quaisquer mensagens de erro são capturadas na variável msg e se o código de retorno é uma falha, você pode executar um diálogo pop-up como zenity, por exemplo.

    
por 08.11.2015 / 13:45
1

Já pensou em usar um melhor nullmailer, msmtp é o mais minimalista possível? ou até mesmo um MTA completo como exim ou postfix (eles não são muito difíceis de configurar)?

Há uma lista de outras opções de nullmailer no link

    
por 05.11.2015 / 03:17
1

O meuh respondeu muito bem. Aqui está uma versão mais simples do mymuttsendmail. Substitua username pelo seu nome de usuário no código a seguir para que ele possa E-mail localmente, caso haja um erro. A variável $? lojas o código de saída do msmtp e usa o correio local para enviar um e-mail se houver Erro ao enviar seu email. Apenas lembre-se de definir sendmail_wait = -1.

#!/bin/bash
/usr/bin/msmtp "$@" 2>&1
VAL=$?
if (($VAL))
then 
    # message not sent
    echo "Error sending mail to $@, exit code $VAL" | mail -s 'ERROR' username
fi 
    
por 09.06.2017 / 04:29