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?


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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.