如何从 notmuch 数据库中已有的 maildir 消息文件名获取 notmuch 消息 id 和线程 id?

如何从 notmuch 数据库中已有的 maildir 消息文件名获取 notmuch 消息 id 和线程 id?

假设我做了一个返回文件的查询:

$ notmuch search --output=files tag:inbox from:love

这将返回一个文件列表,指向 Maildir 消息。现在我选择这些文件之一(已经在 notmuch 数据库中),例如

FILENAME=$(notmuch search --output=files tag:inbox from:love | fzf)

我想在 notmuch 数据库中获取它的消息 ID 和线程 ID。从变量 $FILENAME 中,我想找到不多的消息 ID。

执行此操作的一种非常草率的方法是解析文件,从/subject/date 读取标头并进行不多的查询notmuch search from:{...} subject:{...} date:{..}。但由于文件名已经存储在数据库中,我想应该有一种规范且可靠的方法来从文件名中获取消息 ID。

谢谢!

答案1

我最终找到了一种通过不多的 python 绑定的方法,请参阅https://notmuch.readthedocs.io/projects/notmuch-python/en/latest/database.html?highlight=filename#notmuch.Database.find_message_by_filename

一个有效的打击一个班轮是

threadId=$(python3 -c "import notmuch; db = notmuch.Database(); print(db.find_message_by_filename('$FILENAME').get_thread_id())");

解压后的python3代码是

import notmuch
db = notmuch.Database()
msg = db.find_message_by_filename('filename of the maildir message')
msg.get_thread_id()

答案2

我没有找到任何根据 maildir 文件名搜索 notmuch 数据库的方法搜索词不多(7)

您可以通过迭代 Message-Ids 直接从搜索中获取 Message-Id 和 notmuch 线程 id:

for message_id in $(notmuch search --output=messages 'tag:inbox from:love')
do
  thread_id=$(notmuch search --output=threads $message_id)
  echo "$thread_id - $message_id"
done

或者您可以迭代线程并获取关联的消息 ID:

for thread_id in $(notmuch search --output=threads 'tag:inbox from:love')
do
  # sed is here only to provide the output in the same format as in the first example
  notmuch search --output=messages $thread_id | sed "s/^/$thread_id - /"
done

哪个更适合您的需求。两个 for 循环都以以下格式打印结果:

thread:THREAD_ID - id:MESSAGE_ID

如果你想得到,日期,主题headers 您还可以使用 jq 直接从 notmuch 数据库中提取它,而不需要使用解析 maildir 文件邮件(1)或类似的工具。

notmuch search --format=json id:MESSAGE_ID | jq -r '.[].subject'

相关内容