如何将Mutt与本地存储,IMAP和即时推送新电子邮件一起使用?


8

我正在考虑切换到mutt电子邮件。但是,我有一些要求。

  1. 我希望能够离线存储电子邮件。
  2. 我希望将电子邮件立即发送到本地计算机,而不是定期轮询(例如,使用IMAP IDLE)。

对于离线存储,我可以使用imapofflineisync。我知道后者更稳定。但是,要按需推送电子邮件,我为isync找到的唯一选择是mswatch。不幸的是,这需要在远程电子邮件服务器上安装程序,而这是不可能的。有没有可以让我使用的解决方案mutt,以及离线电子邮件存储和即时电子邮件传递功能?


您是否考虑过询问电子邮件服务器的系统管理员?
cas

@cas是的,但我认为自己进行测试可能更简单,更快捷。还有一个更“明确的”答案,因为这可能很少见。
Sparhawk

您还是应该问问他们,因为他们可能会反对您在他们的服务器上安装mswatch或其他软件
cas

@cas也许我误会了,但我认为mswatch仅在本地安装。
Sparhawk

1
mswatch网站说:“ mswatch通过在客户端和服务器上运行自身来监视邮件存储的更改(需要通过外壳访问它们)”。我想这意味着它需要同时安装在两者上。
cas

Answers:


5

立即将邮件“推送”到客户端的唯一方法是服务器在邮件交付后立即将其推送。这就不可避免地需要在邮件服务器上安装并运行软件,因此每个潜在的解决方案都将具有与相同的问题mswatch

频繁轮询可能是您的最佳选择。

以我的经验,offlineimap每隔几分钟运行cron或进行类似操作就足够了。

一些获取imap的程序支持imap IDLE命令。IDLE并非完全“推送”(因为客户端仍从服务器拉出邮件),但通常会导致对本地邮箱的几乎即时更新。

offlineimap支持该功能,但手册中指出“ IDLE支持不完整且尚在试验中。可能会遇到错误。”

从版本5.0开始,fetchmail支持IDLE


也许(再次)我误会了。当前在Thunderbird中,我可以将其设置为“如果服务器支持,请使用IDLE命令”。我认为这与电子邮件服务器建立了永久连接,因此电子邮件传递是即时的。这对于我的电子邮件服务器(NetOrigin,Gmail,mail.com等)开箱即可使用。
Sparhawk

是的,这是真的。但实际上与最终用户几乎没有区别-IDLE保持连接打开(使用服务器上的文件描述符之类的资源),并且轮询频繁地进行连接和断开连接。轮询会增加一些开销,但是如果您的邮件服务器无法解决问题,则系统管理员需要解决更大的问题。
cas

顺便说一句,offlineimap它对IDLE提供了一些支持,但手册中指出“ IDLE支持不完整,尚处于试验阶段。可能会遇到错误。”
cas

根据我的经验,IDLE(最多)在获取电子邮件之前会延迟几秒钟。OTOH,许多电子邮件客户端的默认轮询时间约​​为5分钟。我想象过将其设置为(例如)10秒将不是理想的选择。通过搜索网络,一则热门文章 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(尽管这是针对特定客户的)。
Sparhawk


4

不幸的是,另一个答案中提出的两种可能性并不完美。offlineimap最好的时候是越野车。例如,没有办法在收到新邮件后自动运行脚本。fetchmail不双向同步。

相反,我最终使用的解决方案是imapnotifyisync的组合。我配置imapnotify为在触发新邮件时(通过IDLE)运行脚本。

该脚本的运行mbsync "${channel}:INBOX"取决于哪个帐户有邮件。接下来运行notmuch new。最后,它将未读电子邮件的数量记录到一个文件中,如下所示。该文件的内容显示在我的桌面环境的面板上。

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

更新资料

imapnotify(nodejs-imapnotify)定期断开连接,没有警告/错误,并且经常丢失新邮件。python-imapnotify也可以间歇工作。但是,根据我的经验,goimapnotify效果很好。它很少丢失,并且当它退出时(例如,由于网络断开和/或挂起周期),它可以快速重新启动,而不必大惊小怪。


您可以在邮件到达后立即offlineimap使用以下命令运行脚本:使用postsynchook配置中的选项;那就是我的运行notmuch new方式
jasonwryan 2015年

@jasonwryan是专门用于IDLE吗?我不是100%,如果我理解正确的,但是这个"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk

不,我不使用Idle ...
jasonwryan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.