发送后如何访问 MailItem?

How can I access a MailItem after it has been sent?

在我的 WPF 应用程序中,我创建并显示了一个 MailItem,如下所示:

using Microsoft.Office.Interop.Outlook;

Application outlook = new Application();
NameSpace ns = outlook.GetNamespace("MAPI");
MailItem mailItem = outlook.CreateItem(OlItemType.olMailItem);
mailItem.Display(false);
string lastEntryId = mailItem.EntryID; // remember EntryId

用户现在可以撰写和发送邮件。

用户发送邮件后,他在我的应用程序中确认发送。然后我的应用程序应该将邮件保存在文件系统中。我的方法是 "remember" MailItem.EntryID 发送后使用它。

// ... lastEntryId is null therefore this code doesn't work
MailItem mailItem = ns.GetItemFromID(lastEntryId);
string fileName = GetValidFileName(item.Subject) + ".msg";
string file = Path.Combine(GetSaveDirectory(), fileName);
item.SaveAs(file);

但是lastEntryId在发送之前是null所以我不能使用它。

问题是:MailItem 发送后如何访问?

即使您在邮件发送前拥有条目 ID,当邮件发送并移至“已发送邮件”文件夹时,它也会发生变化。它仅在 PST 存储下保持不变。

Items.ItemAdd 已发送邮件文件夹中的事件是您最早可以访问已发送邮件的事件。

如果不关心消息是否处于已发送状态,也可以使用Application.ItemSend事件