Outlook 保存在ItemSend事件中的MailItem保存为草稿

Outlook 保存在ItemSend事件中的MailItem保存为草稿,outlook,vsto,outlook-addin,Outlook,Vsto,Outlook Addin,我正在开发一个Outlook外接程序,允许用户在发送电子邮件后立即将其保存到文件系统 为了实现这一点,我截获Application.ItemSend事件,并在处理程序中调用MailItem.SaveAs(…)。它基本上是有效的 我面临的问题是,当我打开保存的文件时,电子邮件处于草稿状态。我的意思是,收件人、主题和邮件正文可以修改,电子邮件可以重新发送。我希望电子邮件处于“已发送”状态,即不可修改 Outlook API似乎不提供在发送电子邮件后发送的任何事件。只有之前,这是我的痛苦 你有什么办法

我正在开发一个Outlook外接程序,允许用户在发送电子邮件后立即将其保存到文件系统

为了实现这一点,我截获Application.ItemSend事件,并在处理程序中调用MailItem.SaveAs(…)。它基本上是有效的

我面临的问题是,当我打开保存的文件时,电子邮件处于草稿状态。我的意思是,收件人、主题和邮件正文可以修改,电子邮件可以重新发送。我希望电子邮件处于“已发送”状态,即不可修改

Outlook API似乎不提供在发送电子邮件后发送的任何事件。只有之前,这是我的痛苦

你有什么办法来做这个吗

非常感谢你的帮助


Nico

您最早可以在“已发送”状态下保存邮件并填充发件人属性的时间是
邮件。ItemAdd
事件在“已发送邮件”文件夹中激发。

您好,谢谢您的建议;几天前我试过,发现它不可靠。。。使用此解决方案,是否可以处理重定向规则?我的意思是,如果项目被重定向到“已发送项目”文件夹之外的文件夹。。。谢谢Items.ItemAdd是非常可靠的,除非您一次添加的电子邮件超过16封(相当于发送邮件文件夹)。如果项目应保存到其他文件夹,则可以检查Application.ItemSend事件中的MailItem.SaveSentMessageFolder,如果该文件夹不是默认的Sent Items文件夹,则也可以在该文件夹上创建事件接收器-您可以使用字典(条目id vs Items对象)存储额外的Items对象以处理事件。谢谢Dmitry;我在上的其他地方阅读过,因此在MAPIFolder.Items上保留一个引用非常重要,以避免事件断开连接。你写了这个:)。我让一位客户测试了这个解决方案,它的性能非常好。谢谢!