我有一个Outlook 2013插件,它有一个我无法正常工作的ItemSend Eventhandler。
它的作用是:
循环所有收件人(to,cc,bcc)并为每个收件人创建一个单独的副本,仅将该电子邮件作为收件人发送。然后从发送的邮件文件夹中删除它们。这很好。
再创建一个副本,其中包含原始的to,cc和bcc信息。使用move-method将其移动到Sent items文件夹,因为Save会将它放在Outbox中。它一定不能实际发送,它应该只是你的个人副本,好像它已经正常发送一样。
设置cancel = true并使用discard关闭检查器窗口,因此也不会发送原始窗口。这也有效。
问题是保存的副本。当我打开它时,它处于撰写模式。基本上它和草稿一样。我希望看到它在读取模式下发送。
我读过Sent-property确定要显示它的模式,但该属性是readonly,SentOn也是null,即使模式正确也是一个问题。有没有办法解决?
我甚至尝试从“已发送邮件”文件夹中获取实际发送的其他邮件之一,编辑内容并保存。但这导致了相同的行为。 MailItem也发送了Sent = False和SentOn = null。
这可能是因为即使调用了Send-in它还没有被发送,因为我们仍在运行EventHandler而我不认为Outlook实际上是在另一个线程中发送它?
无论如何,这似乎不是一种有效的解决方法。
任何想法如何实现这种功能?
答案 0 :(得分:0)
在低(扩展MAPI)级别,只有在第一次保存项目之前,才能从PR_MESSAGE_FLAGS
属性中删除MSGFLAG_UNSENT位(MAPI限制)。
在发送状态中创建的唯一OOM项是帖子项。创建帖子项目,将其MessageClass
属性更改回IPM.Note
,保存,记住项目的条目ID,使用Marshal.ReleaseComObject
发布帖子项目(如果是.Net) ),然后使用Namespace.GetItemfromId
重新打开它 - 您将在已发送状态中拥有MailItem
个对象。您仍然需要更新/删除PR_ICON_INDEX
属性以确保图标正确。
如果使用Redemption是一个选项,则可以设置Sent
属性(保存之前)以及SentOn
/ ReceivedTime
/ {{1} } / Sender
属性。
脱离我的头顶:
SentOnBehalfOf