C#Outlook插件-在发送框中创建新项目而不发送该电子邮件

C#Outlook插件-在发送框中创建新项目而不发送该电子邮件,c#,outlook,outlook-addin,C#,Outlook,Outlook Addin,我正在为outlook编写一个插件,我想在发送框中创建新项目,但我不想发送它,只需将它保存到发送框 请帮帮我 Outlook对象模型通常不允许您在已发送状态下创建邮件-MailItem。sent属性为只读。即使在MAPI级别(C++或Delphi),只有在首次保存消息之前,才能从PR\u MESSAGE\u FLAGS属性中删除MSGFLAG\u UNSENT位。OOM在发送状态下创建的唯一一种项目是post项目,因此理论上,您可以创建一个post项目,保存它,将其MessageClass属性重

我正在为outlook编写一个插件,我想在发送框中创建新项目,但我不想发送它,只需将它保存到发送框


请帮帮我

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

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

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

谢谢,我用赎回的方式修复了。但我有一个新问题,我无法检测发送框中的电子邮件是假的(通过赎回创建)还是真的?您能帮助我吗?您可以使用RDOMial.Fields[]或RDOMail.UserProperties设置自定义属性。然后,您可以检查该属性是否存在,以确定它是否由您的代码创建。此外,如果帖子回答了您的问题,请将其标记为该属性。