在“已发送”文件夹中,我想收集threadId(这没关系),并从标题中删除额外的StringReference。我找到了以下http://mdn.beonex.com/en/XPCOM_Interface_Reference/nsIMsgDBHdr.html:
清楚,如果要对邮件头进行持久更改, 例如将其标记为已阅读,或回复,或等等,您必须这样做 通过其相应的nsIMsgFolder(msgHdr.folder)或 nsIMsgDatabase(msgHdr.folder.msgDatabase)。
但是我无法创建一个正常工作的代码,因为我无法获得nsIMsgDatabase,但即使我可以将这个对象用于实际的msgHdrDb,我也应该使用某些提交类型调用Commit(type),这是我无法弄清楚的。任何人都可以通过一些示例帮助我如何对msgHdrDb中的消息进行永久性更改吗?
提前感谢您的帮助!
答案 0 :(得分:1)
我很确定这种方法不起作用,因为你只会修改本地存储的消息头,而不是实际的消息。虽然这适用于本地文件夹/ POP3帐户,但它不适用于IMAP帐户,并且更改不会传播到IMAP服务器。
https://groups.google.com/forum/#!topic/mozilla.dev.apps.thunderbird/yWGIYQ8bwfE实际上有一个关于此问题的主题;它包含大量有价值的信息,并回答您的问题。您基本上必须创建消息的新副本并将其注入文件夹。这样做,您可以修改标题。我认为最重要的是:只需查看https://addons.mozilla.org/thunderbird/addon/header-tools-lite/?src=mozilla.dev.apps.thunderbird(标题工具精简版)的源代码,看看他们是如何做到的。
干杯,
答案 1 :(得分:0)
// This mail is in the INBOX folder
if (MAIL_LIST[actualMsgHdrDb.messageId] != null) {
// This is a FORCED answer mail in INBOX folder
// Removing marker
log("--------------------------- Removed from MAIL LIST ----------------------------");
log("REMOVED MESSAGE: "
+ MAIL_LIST[actualMsgHdrDb.messageId].subject);
actualMsgHdrDb.setReferences("");
MAIL_LIST[actualMsgHdrDb.messageId].subject = MAIL_LIST[actualMsgHdrDb.messageId].subject
.replace(/Forced/, "Answered");
log("REPLACED SUBJECT: "
+ MAIL_LIST[actualMsgHdrDb.messageId].subject);
/* THIS IS THE PART WHERE I FLUSH THE DATA TO DISK */
MAIL_LIST[actualMsgHdrDb.messageId].folder.msgDatabase = null;
log("SUBJECT HAS BEEN SET TO: "
+ MAIL_LIST[actualMsgHdrDb.messageId].subject);
// Removing from list
delete MAIL_LIST[actualMsgHdrDb.messageId];
}
答案 2 :(得分:0)
实际上有一个开源软件包thunderbird-stdlib,它开发的就是这样做的。代码看起来像这样
Components.utils.import("chrome://path/to/thunderbird-stdlib/msgHdrUtils.js")
var msgHdr = ... get the message header ...;
msgHdrsModifyRaw([msgHdr], function(input) {
// modify the raw input here.
var modified = input.modify()
return modified
});