我正在考虑切换到mutt
电子邮件。但是,我有一些要求。
- 我希望能够离线存储电子邮件。
- 我希望将电子邮件立即发送到本地计算机,而不是定期轮询(例如,使用IMAP IDLE)。
对于离线存储,我可以使用imapoffline
或isync
。我知道后者更稳定。但是,要按需推送电子邮件,我为isync找到的唯一选择是mswatch。不幸的是,这需要在远程电子邮件服务器上安装程序,而这是不可能的。有没有可以让我使用的解决方案mutt
,以及离线电子邮件存储和即时电子邮件传递功能?
我正在考虑切换到mutt
电子邮件。但是,我有一些要求。
对于离线存储,我可以使用imapoffline
或isync
。我知道后者更稳定。但是,要按需推送电子邮件,我为isync找到的唯一选择是mswatch。不幸的是,这需要在远程电子邮件服务器上安装程序,而这是不可能的。有没有可以让我使用的解决方案mutt
,以及离线电子邮件存储和即时电子邮件传递功能?
Answers:
立即将邮件“推送”到客户端的唯一方法是服务器在邮件交付后立即将其推送。这就不可避免地需要在邮件服务器上安装并运行软件,因此每个潜在的解决方案都将具有与相同的问题mswatch
。
频繁轮询可能是您的最佳选择。
以我的经验,offlineimap
每隔几分钟运行cron或进行类似操作就足够了。
一些获取imap的程序支持imap IDLE命令。IDLE并非完全“推送”(因为客户端仍从服务器拉出邮件),但通常会导致对本地邮箱的几乎即时更新。
offlineimap支持该功能,但手册中指出“ IDLE支持不完整且尚在试验中。可能会遇到错误。”
从版本5.0开始,fetchmail支持IDLE
offlineimap
它对IDLE提供了一些支持,但手册中指出“ IDLE支持不完整,尚处于试验阶段。可能会遇到错误。”
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
(尽管这是针对特定客户的)。
fetchmail
从v5.0 fetchmail.info/fetchmail-features.html
不幸的是,另一个答案中提出的两种可能性并不完美。offlineimap
最好的时候是越野车。例如,没有办法在收到新邮件后自动运行脚本。fetchmail
不双向同步。
相反,我最终使用的解决方案是imapnotify和isync的组合。我配置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
方式