¿Cómo puedo usar mutt con almacenamiento local, IMAP y envío instantáneo de correo electrónico nuevo?

8

Estoy pensando en cambiarme muttpor correo electrónico. Sin embargo, tengo algunos requisitos.

  1. Me gustaría poder almacenar el correo electrónico sin conexión.
  2. Me gustaría que el correo electrónico se envíe inmediatamente a mi computadora local en lugar de encuestas periódicas (por ejemplo, usando IMAP IDLE).

Para el almacenamiento fuera de línea, podría usar imapofflineo isync. Entiendo que este último es más estable. Sin embargo, para enviar el correo electrónico a pedido, la única opción que he encontrado para isync es mswatch . Desafortunadamente, esto requiere que se instale un programa en el servidor de correo electrónico remoto, lo cual no es posible. ¿Existe una solución que me permita usar mutt, con almacenamiento de correo electrónico fuera de línea y entrega instantánea de correo electrónico?

Gavilán
fuente
¿ha considerado preguntarle al administrador del sistema de su servidor de correo electrónico?
cas
@cas Sí, pero pensé que podría ser más simple y rápido probarlo yo mismo. Y una respuesta más "definitiva", ya que probablemente sea un caso raro.
Sparhawk
usted debe preguntar a ellos de todos modos, ya que pueden oponerse a que la instalación de mswatch u otro software en su servidor
cas
@cas Quizás no entiendo bien, pero pensé que mswatch solo se instaló localmente.
Sparhawk
1
el sitio web de mswatch dice "mswatch monitorea los almacenes de correo en busca de cambios ejecutándose tanto en el cliente como en el servidor (se requiere acceso de shell a cada uno)". Supongo que eso significa que debe instalarse en ambos.
cas

Respuestas:

5

La única forma de "enviar" el correo inmediatamente a su cliente es que el servidor lo haga tan pronto como se entregue el correo. Esto inevitablemente requerirá la instalación y ejecución del software en el servidor de correo, por lo que cada solución potencial tendrá el mismo problema mswatch.

Las encuestas frecuentes son probablemente su mejor opción.

En mi experiencia, ejecutar offlineimapo similar desde cron cada pocos minutos funciona lo suficientemente bien.

Algunos programas de obtención de imap admiten el comando imap IDLE. IDLE no es exactamente 'push' (ya que el cliente todavía extrae el correo del servidor), pero generalmente genera actualizaciones casi instantáneas en su buzón local.

offlineimap lo admite, pero el manual dice "El soporte IDLE es incompleto y experimental. Pueden encontrarse errores".

fetchmail admite IDLE desde la versión 5.0

cas
fuente
Quizás (de nuevo) no lo entiendo. Actualmente con Thunderbird, puedo configurarlo para "Usar el comando IDLE si el servidor lo admite". Creo que esto establece una conexión permanente con el servidor de correo electrónico, por lo que la entrega de correo electrónico es instantánea. Esto funciona bien desde el primer momento para mis servidores de correo electrónico (NetOrigin, Gmail, mail.com, etc.).
Sparhawk
sí, eso es verdad. pero prácticamente no hay ninguna diferencia para el usuario final: IDLE mantiene una conexión abierta (utilizando recursos como los descriptores de archivo en el servidor) y las encuestas se conectan y desconectan con frecuencia. hay un poco más de gastos generales con el sondeo, pero si su servidor de correo no puede hacer frente a eso, los administradores de sistemas deben resolver los problemas más grandes.
cas
Por cierto, offlineimaptiene algún soporte para IDLE, pero el manual dice "El soporte de IDLE es incompleto y experimental. Pueden encontrarse errores".
cas
En mi experiencia, IDLE tiene (como máximo) algunos segundos de retraso antes de recuperar el correo electrónico. OTOH, muchos clientes de correo electrónico tienen un tiempo de sondeo predeterminado del orden de ~ 5 minutos. Me imagino que establecerlo en (digamos) 10 segundos no sería lo ideal. Al buscar en la web, un éxito inicial dice Don't set the automatic send/receive interval too short [less than 5 minutes] or you could end up endlessly polling the mail server, send/receive errors and sometimes even duplicates (aunque esto es para un cliente específico).
Sparhawk
fetchmailtambién es compatible con IDLE desde v5.0 fetchmail.info/fetchmail-features.html
cas
4

Desafortunadamente, las dos posibilidades sugeridas en la otra respuesta eran imperfectas. offlineimapfue bastante buggy en el mejor de los casos. Por ejemplo, no hay forma de ejecutar automáticamente una secuencia de comandos después de que llega un nuevo correo. fetchmailno se sincroniza bidireccionalmente.

En cambio, la solución que terminé usando era una combinación de imapnotify e isync . Configuré imapnotifypara ejecutar un script cuando se activa un nuevo correo (a través de IDLE).

Este script se ejecuta mbsync "${channel}:INBOX"según la cuenta que tenga correo. A continuación se ejecuta notmuch new. Finalmente, registra la cantidad de correos electrónicos no leídos en un archivo como se muestra a continuación. El contenido de este archivo se muestra en un panel de mi entorno de escritorio.

mail_count_file="/home/foo/.cache/new_mail_count"
new_count=$(find ~/.mail/*/Inbox/new -type f | wc -l)
if [[ $new_count > 0 ]]; then
  echo $new_count > "$mail_count_file"
else
  if [[ -f "$mail_count_file" ]]; then
    rm "$mail_count_file"
  fi
fi

Actualizar

imapnotify (nodejs-imapnotify) se desconecta regularmente sin advertencias / errores, y a menudo pierde correo nuevo. python-imapnotify también funciona de manera intermitente. Sin embargo, goimapnotify funciona muy bien en mi experiencia. Raramente se cae, y cuando lo hace (por ejemplo, debido a desconexiones de la red y / o suspender ciclos), se reinicia rápidamente sin problemas.

Gavilán
fuente
Puede ejecutar un script inmediatamente después de que llegue el correo con offlineimap: usando la postsynchookopción en la configuración; así es como corro notmuch new...
jasonwryan
@jasonwryan ¿Es eso para IDLE específicamente? No estoy al 100% si entiendo correctamente, pero esto dice"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk
No, no uso Idle ...
jasonwryan