在与本地 maildir 收件箱同步并使用+offlineimap
执行垃圾邮件过滤和排序后,我使用 标记邮件存储中的邮件。fdm
bogofilter
notmuch
直到最近,我还使用以下 shell 代码根据某些条件来标记和重新标记消息:
notmuch new
tr -s '\t' ' ' <<'END_BATCH' | notmuch tag --batch
-inbox +sent -- folder:/Sent/
-inbox +archive -- folder:/Archive/
-inbox +junk -- folder:/Junk/
+unsorted -- folder:/INBOX.Unsorted/
-unsorted -- not folder:/INBOX.Unsorted/
-unread -- tag:archive
+unread -- tag:unsorted
END_BATCH
这将从、或文件夹inbox
中的任何邮件中删除标签,同时使用这三个文件夹的适当标签重新标记邮件。然后,它根据消息是否位于文件夹(我放置无法分类的消息的位置)中来标记或取消标记消息。最后,我确保已归档的消息不会被标记为 ,并且未排序的消息会被标记为。Sent
Archive
Junk
INBOX.Unsorted
bogofilter
unread
unread
这很有效。
由于我通过五个不同的帐户接收邮件,因此我还想根据文件夹名称向邮件添加诸如 等标签account-somename
:account-othername
notmuch new
tr -s '\t' ' ' <<'END_BATCH' | notmuch tag --batch
-inbox +sent -- folder:/Sent/
-inbox +archive -- folder:/Archive/
-inbox +junk -- folder:/Junk/
+unsorted -- folder:/INBOX.Unsorted/
-unsorted -- not folder:/INBOX.Unsorted/
-unread -- tag:archive
+unread -- tag:unsorted
+account-acc1 -- folder:/acc1/
+account-acc2 -- folder:/acc2/
+account-acc3 -- folder:/acc3/
+account-acc4 -- folder:/acc4/
+account-acc5 -- folder:/acc5/
END_BATCH
标记似乎按预期执行,但副作用是新邮件被标记为旧邮件(从 maildir 的new
目录移动到该cur
目录)。这反过来意味着mutt
不会检测收件箱中的新消息(除非我maildir_check_cur
在mutt
配置中进行设置,我认为这不是一个很好的解决方案)。
我不知道为什么或者我能做些什么来阻止这种情况发生。
我的notmuch
配置:
[database]
path=/home/myself/Mail/inboxes
[user]
name=myname
[email protected]
[email protected]
[new]
tags=inbox;unread
[search]
[maildir]
syncronize_flags=true
[index]
header.List=List-Id
发生这种情况似乎是因为
notmuch
对于哪些邮件文件应该放在哪个 Maildir 子目录中有点过于迂腐,并且因为offlineimap
对同一件事有点过于宽松。该
offlineimap
实用程序按预期将邮件消息传递到目标 Maildir 的new
目录中,但文件名具有:2,
文件名后缀,表示“此邮件消息没有标志”。通常,全新的、未见过的和刚刚发送的消息文件不应该具有此文件名后缀,因为是用户的 MUA(邮件客户端)添加它。当
notmuch
配置为同步 Maildir 标志(您最有可能希望它这样做)时,它会注意到消息文件具有文件名后缀:2,
,因此假设用户必须在其 MUA 中看到消息,但他们尚未阅读它们(S
后缀中逗号后面没有)。然后它将消息文件移动到该cur
目录。因此,邮件mutt
客户端将它们显示为“旧”(已看过但未读)。解决方案是纠正 的行为
offlineimap
,但它已被作为 bug 提出并于 2015 年被驳回。我的解决方案是
offlineimap
从等式中取出。相反,我使用 来获取所有邮件fdm
。我稍后可能会考虑另一个 IMAP 同步解决方案(mbsync
?),因为邮件服务器上有几周的邮件对于从我的主机上访问它很有好处。