Removendo o atraso de envio do mutt

Removendo o atraso de envio do mutt

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=-1extensão muttrc.

No entanto, se eu usar msmtpcomo MTA, não haverá notificação de erros (embora msmtpgrave logfileconforme especificado em ~/.msmtprc).

Tente receber notificações

Na linha de comando, posso acionar um comando quando msmtpfalhar.

</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 msmtparquivo 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, muttestá 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 msmtpnecessariamente vinculado.

Responder1

Escreva um pequeno script de shell para usar como valor "sendmail". Por exemplo, configurar ~/.muttrccom

set sendmail = /home/yourid/bin/mymuttsendmail

e mymuttsendmailcoloque 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 +xeste 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 msge 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, msmtpque 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 usernamepelo 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 

informação relacionada