C #Outlook插件 - 在不发送该电子邮件的情况下在Sent Box中创建新项目

时间:2018-05-22 10:44:00

标签: c# outlook outlook-addin

我正在为outlook编写插件,我想在Sent Box中创建新项目,但我不想发送它,只需将其保存到Sent Box即可。

请帮助我!

1 个答案:

答案 0 :(得分:0)

通常,Outlook对象模型不允许您在已发送状态下创建消息 - MailItem.Sent属性是只读的。即使在MAPI级别(C ++或Delphi)上,只有在第一次保存消息之前,才能从MSGFLAG_UNSENT属性中删除PR_MESSAGE_FLAGS位。 OOM在已发送状态中创建的唯一项目是一个帖子项,因此理论上,您可以创建一个帖子项,保存它,将其MessageClass属性重置为"IPM.Note",取消引用它,重新打开条目ID - 您现在将拥有处于已发送状态的MailItem。您不必设置所有发件人和收件人属性(大约十几个)并删除特定于帖子的属性 - 使用OutlookSpy查看已发送的邮件(单击IMessage按钮)。

如果使用Redemption(任何语言)是一个选项,它可以轻松创建虚假发送消息:

Set MySession = CreateObject("Redemption.RDOSession")
MySession.MAPIOBJECT = Application.Session.MAPIOBJECT
Set Folder = MySession.GetDefaultFolder(olFolderSentMail)
Set msg = Folder.Items.Add("IPM.Note")
msg.Sent = True
msg.Recipients.AddEx "The user", "user@domain.demo", "SMTP", olTo
msg.Sender = MySession.CurrentUser
msg.SentOnBehalfOf = MySession.CurrentUser
msg.subject = "Test sent message"
msg.Body = "test body"
msg.SentOn = Now
msg.ReceivedTime = Now
msg.Save