MailItem in changing times.
According to the
documentation,
the first parameter of the Reply
(and ReplyAll
, and Forward
)
events on a MailItem
event in Outlook is “the new item being sent in
response to the original message”.
Uh, no. At least in VSTO; not sure about VBA, but I cannot see how it could be different there given that VSTO is a wrapper around the same COM interfaces. The argument is the original item that is being responded to:
void OnReply(object Response, ref bool Cancel)
{
Cancel = false;
if (Response is Outlook.MailItem item) {
string html = item.HTMLBody;
int pos = html.LastIndexOf("</body>");
item.HTMLBody = html.Insert(pos, "This is the modified item. ");
}
}
After this handler runs, the original item that was replied to will have the new sentence at the end, while the reply is entirely original. I suppose this means that the response message is created first, and then the event fires with the wrong argument.
Helpfully, though, when using Outlook’s preview/reading pane (whatever
its name is this afternoon) the InlineResponse
event on the
Explorer
object actually gets the correct message, i.e. the new one.