Modifying the contents of a message

Axel axel.grude at googlemail.com
Thu Jan 26 18:00:05 UTC 2012


On 26/01/12 17:47, Jonathan Protzenko wrote:
> On 01/26/2012 06:17 PM, David Bienvenu wrote:
>> On 1/26/2012 7:19 AM, Jonathan Protzenko wrote:
>>> Hi everyone,
>>>
>>> Ever since I started reading the mozilla.dev.apps.thunderbird and 
>>> mozilla.dev.extensions newsgroups, a recurring question about Thunderbird has been 
>>> "how can I modify the contents of a message" from an addon? I recently (less than 
>>> 7 days ago) replied to this question twice, and my answer was basically:
>>> - inject a message in a local folder,
>>> - copy it to the destination folder,
>>> - remove the old message.
>>>
>>> I'm not sure there's a better way, but I guess not. My question is: could we make 
>>> that easier by implementing, say, in C++, nsIMsgFolder::InjectMessageFromStream, 
>>> making it of course scriptable? The arguments are:
>>> - this is something an addon will want to do, and it seems legitimate that they 
>>> should want to do so,
>>> - it's better to provide a function for that than to have someone do it real, real 
>>> wrong.
>> Yes, it would be great to provide an easy way for extensions to do this, because 
>> extensions often forget about things like IMAP, and going forward, things like 
>> pluggable stores.
>>
>> I think JS code to do this would be better than c++ methods. I think there's 
>> sufficient mechanisms in the backend to do this already since detach attachment 
>> does it, but additional method(s) would be helpful, we can add them.
> I'm not sure what is the right way to do this from JS. Do you have some pseudo-code 
> describing how one should proceed if they want to modify, for instance, one of the 
> headers? I somehow thought that the code for detach was only calling 
> nsMessenger::DetachAttachment and that the rest of the process was driven from C++.
>
> Thanks,
>
> jonathan
Jon, did you get my other email with the pseudo code?

Let's say you create a new extended interface nsIMsgDBHdrWriteable. and add a clone 
method to an email. The clone would be in memory until finalized and stored.

newmail = mail.clone()
hdr = newmail .QueryInterface(Ci.nsIMsgDBHdrWriteable);
msg.writeHeaderField( 'Subject', "bla bla");
msg.resetHeaderField('Author');
msg.addHeaderField('Author',author1);
msg.addHeaderField('Author',author2);
newmail.finalize(folder);
newmail.store();

something along these lines?
Ax

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/tb-planning/attachments/20120126/bcd20598/attachment.html>


More information about the tb-planning mailing list