在文件夹中创建和保存消息
Create and save message in folder
我正在编写 Thunderbird 扩展程序,我想知道是否有办法创建消息并将其保存到某个文件夹。代码看起来像这样。
create nsIMsgDBHdr header
header.subject = sub
header.from = from
header.to = to
header.body = body // although nsIMsgDBHdr doesen't have body attr
nsIMsgFolder folder
folder.save(header)
现在我正在使用一种肮脏的方式来完成这项工作。我写了稍后发送的消息,将其存储在本地发件箱中,然后将其移动到给定的文件夹中。
var localSrv = accountManager.FindServer("nobody", "Local Folders", "none");
var localAcc = accountManager.FindAccountForServer(localSrv);
var outbox = localSrv.rootFolder.getChildNamed("Outbox");
var inbox = server.rootFolder.getChildNamed("Inbox");
var account = accountManager.FindAccountForServer(server);
let compFields = Components.classes["@mozilla.org/messengercompose/composefields;1"].createInstance(Components.interfaces.nsIMsgCompFields);
compFields.subject = subject;
compFields.from = fromAddr;
compFields.to = toAddr;
compFields.body = body;
let msgComposeParams = Components.classes["@mozilla.org/messengercompose/composeparams;1"].createInstance(Components.interfaces.nsIMsgComposeParams);
msgComposeParams.composeFields = compFields;
let gMsgCompose = Components.classes["@mozilla.org/messengercompose/compose;1"].createInstance(Components.interfaces.nsIMsgCompose);
gMsgCompose.initialize(msgComposeParams);
gMsgCompose.SendMsg(Components.interfaces.nsIMsgCompDeliverMode.Later,
account.defaultIdentity, // identity
account.key, // account
null, // message window
null); // nsIMsgProgress
let copyService = Components.classes["@mozilla.org/messenger/messagecopyservice;1"].getService(Components.interfaces.nsIMsgCopyService);
var jsMsgHdrArray = [];
var newestDate = -1;
var newestHdr;
for (let msgHdr in fixIterator(outbox.messages, Components.interfaces.nsIMsgDBHdr))
{
if ( msgHdr.date > newestDate )
{
newestHdr = msgHdr;
newestDate = msgHdr.date;
}
}
jsMsgHdrArray.push(newestHdr);
let xpcomHdrArray = toXPCOMArray(jsMsgHdrArray, Components.interfaces.nsIMutableArray);
copyService.CopyMessages(outbox, xpcomHdrArray, inbox, true, null, null, false);
经过几个小时的浏览 mozilla 代码库,我找到了令人满意的解决方案。
let source = "From - Sat Nov 1 12:39:54 2008\n" +
"X-Mozilla-Status: 0001\n" +
"X-Mozilla-Status2: 00000000\n" +
"Message-ID: <" + msgId + ">\n" +
"Date: Wed, 11 Jun 2008 20:32:02 -0400\n" +
"From: Tester <tests@mozillamessaging.invalid>\n" +
"MIME-Version: 1.0\n" +
"To: anna@example.com\n" +
"Subject: " + aSubject + "\n" +
"Content-Type: text/plain; charset=ISO-8859-1\n" +
"Content-Transfer-Encoding: 7bit\n" +
"\n" + aBody + "\n";
folder.QueryInterface(Components.interfaces.nsIMsgLocalMailFolder);
folder.addMessage(source);
我正在编写 Thunderbird 扩展程序,我想知道是否有办法创建消息并将其保存到某个文件夹。代码看起来像这样。
create nsIMsgDBHdr header
header.subject = sub
header.from = from
header.to = to
header.body = body // although nsIMsgDBHdr doesen't have body attr
nsIMsgFolder folder
folder.save(header)
现在我正在使用一种肮脏的方式来完成这项工作。我写了稍后发送的消息,将其存储在本地发件箱中,然后将其移动到给定的文件夹中。
var localSrv = accountManager.FindServer("nobody", "Local Folders", "none");
var localAcc = accountManager.FindAccountForServer(localSrv);
var outbox = localSrv.rootFolder.getChildNamed("Outbox");
var inbox = server.rootFolder.getChildNamed("Inbox");
var account = accountManager.FindAccountForServer(server);
let compFields = Components.classes["@mozilla.org/messengercompose/composefields;1"].createInstance(Components.interfaces.nsIMsgCompFields);
compFields.subject = subject;
compFields.from = fromAddr;
compFields.to = toAddr;
compFields.body = body;
let msgComposeParams = Components.classes["@mozilla.org/messengercompose/composeparams;1"].createInstance(Components.interfaces.nsIMsgComposeParams);
msgComposeParams.composeFields = compFields;
let gMsgCompose = Components.classes["@mozilla.org/messengercompose/compose;1"].createInstance(Components.interfaces.nsIMsgCompose);
gMsgCompose.initialize(msgComposeParams);
gMsgCompose.SendMsg(Components.interfaces.nsIMsgCompDeliverMode.Later,
account.defaultIdentity, // identity
account.key, // account
null, // message window
null); // nsIMsgProgress
let copyService = Components.classes["@mozilla.org/messenger/messagecopyservice;1"].getService(Components.interfaces.nsIMsgCopyService);
var jsMsgHdrArray = [];
var newestDate = -1;
var newestHdr;
for (let msgHdr in fixIterator(outbox.messages, Components.interfaces.nsIMsgDBHdr))
{
if ( msgHdr.date > newestDate )
{
newestHdr = msgHdr;
newestDate = msgHdr.date;
}
}
jsMsgHdrArray.push(newestHdr);
let xpcomHdrArray = toXPCOMArray(jsMsgHdrArray, Components.interfaces.nsIMutableArray);
copyService.CopyMessages(outbox, xpcomHdrArray, inbox, true, null, null, false);
经过几个小时的浏览 mozilla 代码库,我找到了令人满意的解决方案。
let source = "From - Sat Nov 1 12:39:54 2008\n" +
"X-Mozilla-Status: 0001\n" +
"X-Mozilla-Status2: 00000000\n" +
"Message-ID: <" + msgId + ">\n" +
"Date: Wed, 11 Jun 2008 20:32:02 -0400\n" +
"From: Tester <tests@mozillamessaging.invalid>\n" +
"MIME-Version: 1.0\n" +
"To: anna@example.com\n" +
"Subject: " + aSubject + "\n" +
"Content-Type: text/plain; charset=ISO-8859-1\n" +
"Content-Transfer-Encoding: 7bit\n" +
"\n" + aBody + "\n";
folder.QueryInterface(Components.interfaces.nsIMsgLocalMailFolder);
folder.addMessage(source);