Eliminando el retraso de envío de Mutt

Eliminando el retraso de envío de Mutt

Eliminando el retraso de envío de Mutt

Originalmente utilicé el MTA SMTP integrado de mutt. Sin embargo, hay una pausa considerable después de presionar enviar. Esto se puede desactivar utilizando un MTA externo con set sendmail_wait=-1formato muttrc.

Sin embargo, si lo uso msmtpcomo MTA, no hay notificación de errores (aunque msmtpescribo logfilecomo se especifica en ~/.msmtprc).

Intenta recibir notificaciones

Desde la línea de comando, puedo activar un comando cuando msmtpfalla.

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

Posiblemente podría enviar una notificación de error a mi correo *nix local. Sin embargo, esto no parece funcionar en mutt, si configuro lo siguiente en muttrc.

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

Esto hace que todos los correos electrónicos no se envíen de forma silenciosa, con el siguiente error en msmtp's 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, muttse trata de analizar las partes adicionales del comando como destinatarios.

Pregunta

¿Hay alguna manera de recibir notificaciones de correos electrónicos enviados que fallan mientras se envían en segundo plano? No estoy atado msmtpnecesariamente.

Respuesta1

Escriba usted mismo un pequeño script de shell para utilizarlo como valor de "sendmail". Por ejemplo, configurar ~/.muttrccon

set sendmail = /home/yourid/bin/mymuttsendmail

y en mymuttsendmailponer 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

y chmod +xeste archivo. Recuerde que este script se llamará con los destinatarios como argumentos adicionales, que pasaremos a msmtp con "$@", y el correo estará en stdin, que copiaremos inmediatamente en un archivo temporal para luego entregarlo a msmtp. Cualquier mensaje de error se captura en una variable msgy si el código de retorno es un error, puede ejecutar un cuadro de diálogo emergente como zenity, por ejemplo.

Respuesta2

¿Has considerado usar un nullmailer mejor, msmtpque sea lo más minimalista posible? ¿O incluso un MTA completo como exim o postfix (no son muy difíciles de configurar)?

Hay una lista de otras opciones de nullmailer enhttp://linuxmafia.com/faq/Mail/nullmailers.html

Respuesta3

La respuesta de Meuh fue muy útil. Aquí hay una versión más simple de mymuttsendmail. Reemplace usernamecon su nombre de usuario en el siguiente código para que pueda enviarle un correo electrónico localmente en caso de que haya un error. La variable $? almacena el código de salida de msmtp y utiliza el correo local para enviarle un correo electrónico si hay un error al enviar su correo electrónico. Solo recuerda configurar 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 

información relacionada