Como posso usar o mutt com armazenamento local, IMAP e envio instantâneo de novos emails?

8

Estou pensando em mudar muttpara e-mail. No entanto, tenho alguns requisitos.

  1. Gostaria de poder armazenar o email offline.
  2. Eu gostaria que o email fosse enviado imediatamente para o meu computador local, em vez de pesquisas periódicas (por exemplo, usando o IMAP IDLE).

Para armazenamento offline, eu poderia usar imapofflineou isync. Eu entendo que o último é mais estável. No entanto, para enviar emails sob demanda, a única opção que encontrei para o isync é o mswatch . Infelizmente, isso requer a instalação de um programa no servidor de email remoto, o que não é possível. Existe uma solução que me permita usar mutt, com armazenamento offline de email e entrega instantânea de email?

Sparhawk
fonte
você já pensou em perguntar ao administrador do sistema do seu servidor de email?
cas
@cas Sim, mas achei que poderia ser mais simples e rápido testá-lo eu mesmo. E uma resposta mais "definitiva", já que provavelmente é um caso raro.
Sparhawk 22/09
você deve perguntar a eles de qualquer maneira, porque eles podem se opor à instalação do mswatch ou de outro software no servidor deles
cas
@cas Talvez eu entenda mal, mas achei que o mswatch só estava instalado localmente.
Sparhawk 22/09
1
o site da mswatch diz "mswatch monitora as lojas de correio em busca de alterações, executando-se no cliente e no servidor (é necessário acesso ao shell de cada uma)". Presumo que isso significa que ele precisa ser instalado em ambos.
cas

Respostas:

5

A única maneira de enviar por e-mail imediatamente para o seu cliente é fazê-lo assim que o correio for entregue. Isso inevitavelmente exigirá que o software seja instalado e executado no servidor de email, portanto, toda solução em potencial terá o mesmo problema mswatch.

A pesquisa frequente é provavelmente a sua melhor opção.

Na minha experiência, a execução offlineimapou similar do cron a cada poucos minutos funciona bem o suficiente.

Alguns programas de busca por imap suportam o comando imap IDLE. O IDLE não é exatamente 'push' (já que o email ainda é extraído do servidor pelo cliente), mas geralmente resulta em atualizações quase instantâneas na caixa de correio local.

offlineimap suporta, mas o manual diz "O suporte ao IDLE está incompleto e experimental. Podem ser encontrados erros."

O fetchmail suporta IDLE desde a versão 5.0

cas
fonte
Talvez (novamente) eu entenda mal. Atualmente com o Thunderbird, eu posso configurá-lo para "Usar comando IDLE se o servidor suportar". Acho que isso configura uma conexão permanente com o servidor de email, para que a entrega do email seja instantânea. Isso funciona muito bem para os meus servidores de e-mail (NetOrigin, Gmail, mail.com etc.).
Sparhawk
sim, é verdade. mas praticamente existe pouca ou nenhuma diferença para o usuário final - o IDLE mantém uma conexão aberta (usando recursos como descritores de arquivo no servidor), e a pesquisa de opinião conecta e desconecta com frequência. há um pouco mais de sobrecarga na pesquisa, mas se o seu servidor de email não conseguir lidar com isso, haverá problemas maiores para os administradores do sistema resolverem.
cas
BTW, offlineimaptem algum suporte para o IDLE, mas o manual diz "O suporte ao IDLE é incompleto e experimental. Podem ser encontrados erros".
cas
Na minha experiência, o IDLE tem (no máximo) alguns segundos de atraso antes de buscar o email. OTOH, muitos clientes de email têm um tempo de pesquisa padrão da ordem de ~ 5 minutos. Eu imagino que configurá-lo para (digamos) 10 segundos não seria o ideal. Ao pesquisar na web, um hit anterior diz 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 (embora isso seja para um cliente específico).
Sparhawk
fetchmailtambém suporta IDLE desde a v5.0 fetchmail.info/fetchmail-features.html
cas
4

Infelizmente, as duas possibilidades sugeridas na outra resposta foram imperfeitas. offlineimapfoi bastante buggy no melhor dos tempos. Por exemplo, não há como executar automaticamente um script após a chegada de novos emails. fetchmailnão sincroniza bidirecionalmente.

Em vez disso, a solução que acabei usando foi uma combinação de imapnotify e isync . Eu configurei imapnotifypara executar um script quando novos emails são acionados (via IDLE).

Este script é executado mbsync "${channel}:INBOX"dependendo de qual conta possui email. Em seguida, ele é executado notmuch new. Por fim, registra o número de e-mails não lidos em um arquivo como abaixo. O conteúdo deste arquivo é exibido em um painel do meu ambiente de área de trabalho.

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

Atualizar

O imapnotify (nodejs-imapnotify) se desconecta regularmente, sem avisos / erros e geralmente perde novos e-mails. O python-imapnotify também funciona de forma intermitente. No entanto, o goimapnotify funciona muito bem na minha experiência. Raramente desiste e, quando ocorre (por exemplo, devido à desconexão da rede e / ou suspensão de ciclos), ele se reinicia rapidamente sem problemas.

Sparhawk
fonte
Você pode executar um script imediatamente após a chegada do correio com offlineimap: usando a postsynchookopção na configuração; é assim que eu correr notmuch new...
jasonwryan
@jasonwryan Isso é especificamente para o IDLE? Eu não estou 100%, se bem entendi, mas este diz"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk
Não, eu não uso ocioso ...
jasonwryan