Removendo o atraso de envio do mutt
Eu originalmente usei o SMTP MTA integrado do mutt. No entanto, há uma pausa considerável após clicar em enviar. Isso pode ser desabilitado usando um MTA externo com set sendmail_wait=-1
extensão muttrc
.
No entanto, se eu usar msmtp
como MTA, não haverá notificação de erros (embora msmtp
grave logfile
conforme especificado em ~/.msmtprc
).
Tente receber notificações
Na linha de comando, posso acionar um comando quando msmtp
falhar.
</tmp/tosend msmtp -a default [email protected] --read-envelope-from || echo failed
É concebível que eu pudesse enviar uma notificação de falha para 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 e-mails não sejam enviados silenciosamente, com o seguinte erro no msmtp
arquivo 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 durante o envio em segundo plano? Não estou msmtp
necessariamente vinculado.
Responder1
Escreva um pequeno script de shell para usar como valor "sendmail". Por exemplo, configurar
~/.muttrc
com
set sendmail = /home/yourid/bin/mymuttsendmail
e mymuttsendmail
coloque 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 e-mail estará em stdin, que copiamos imediatamente em um arquivo temporário para depois entregar msmtp
. Quaisquer mensagens de erro são capturadas em variável msg
e se o código de retorno falhar você pode executar uma caixa de diálogo pop-up como zenity, por exemplo.
Responder2
Você já pensou em usar um nullmailer melhor, msmtp
que seja o mais minimalista possível? ou até mesmo um MTA completo como exim ou postfix (não são muito difíceis de configurar)?
Há uma lista de outras opções do nullmailer emhttp://linuxmafia.com/faq/Mail/nullmailers.html
Responder3
a resposta do meuh foi muito útil. 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 enviar um e-mail para você localmente caso haja um erro. A variável $? armazena o código de saída do msmtp e usa correio local para enviar um e-mail a você se houver um erro ao enviar seu e-mail. 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