我需要在 Thunderbird 扩展中获取一些电子邮件数据。我在 MDN ( https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIMsgMessageService ) 上找到了这个示例:
var content = "";
var MessageURI = GetFirstSelectedMessage();
var MsgService = messenger.messageServiceFromURI(MessageURI);
var MsgStream = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance();
var consumer = MsgStream.QueryInterface(Components.interfaces.nsIInputStream);
var ScriptInput = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance();
var ScriptInputStream = ScriptInput.QueryInterface(Components.interfaces.nsIScriptableInputStream);
ScriptInputStream.init(consumer);
try {
MsgService.streamMessage(MessageURI, MsgStream, msgWindow, null, false, null);
} catch (ex) {
alert("error: "+ex)
}
ScriptInputStream .available();
while (ScriptInputStream .available()) {
content = content + ScriptInputStream .read(512);
}
alert(content);
但是,当我运行它时,出现以下错误:
Timestamp: 2013.06.21. 14:47:21
Error: ReferenceError: GetFirstSelectedMessage is not defined
Source File: chrome://edus_extension/content/messengerOverlay.js
Line: 90
这个“GetFirstSelectedMessage”函数是什么?如何在不使用它的情况下获取消息 URI?
最佳答案
该文档看起来相当过时。我建议:
- 使用
gFolderDisplay.selectedMessage
(尝试在错误控制台中输入top.opener.gFolderDisplay.selectedMessage
), - 阅读一些最近使用
Services
和MailServices
的代码,以简化您的代码。
话虽如此,我不知道您想要实现什么目标,但是:
- 您当然最好使用
MsgHdrToMimeMessage
等包装器( self 引用: http://blog.xulforum.org/index.php?post/2011/01/03/An-overview-of-Thunderbird-Conversations ) - 如果您绝对、绝对需要获取消息的原始内容,http://mxr.mozilla.org/comm-central/source/mailnews/db/gloda/modules/mimemsg.js#223有一个关于如何执行此操作的示例(它是上述 MsgHdrToMimeMessage 的实现;通过简化它,您应该能够直接获取消息的原始数据)。
祝你好运,一旦您获得工作示例,请将其添加到 MDN wiki!
干杯,
乔纳森
关于javascript - 在 Thunderbird 扩展中获取选定的消息数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235419/