我想用vsto outlook插件发送一封电子邮件。
将有多个收件人和来自DBMS的有关收件人的数据。在邮件模板中将有一个关键字应该被替换为个人数据,如姓名,工作头衔。并且每个邮件上必须只有一个收件人地址,看起来就像我们彼此发送邮件一样。
我想发邮件给每个人而不是所有人。我可以取消原始邮件,并将邮件正文和主题文本更改后逐个发送给每个人。
我注意到“已发送文件夹”中的邮件数量将与收件人数量相同。
我希望在“已发送文件夹”中只看到一封原始邮件,即使原始邮件并未发送(原始邮件不应发送)。
我想我可以在发送所有邮件后删除“已发送文件夹”中的所有邮件,并将原始邮件移到“已发送文件夹”中,但未设置标记为"UnSent“的原始邮件和提交时间。如何以编程方式使此项目看起来像已发送的邮件。
或者有没有办法解决我的问题?
我正在使用Outlook2007和Visual Studio 2010 VSTO with Framework3.5。
发布于 2013-02-21 12:52:26
首先,要在消息发送后将其删除,请将MailItem.DeleteAfterSubmit属性设置为true。
通常,Outlook创建的所有邮件都是在未发送状态下创建的,无法更改这一状态。在MAPI级别,您可以在PR_MESSAGE_FLAGS属性中设置MSGFLAG_UNSENT位,但Outlook不允许您这样做。但是,您可以使用RDOMail.Sent属性(读/写)在Redemption中设置该属性(同样,在第一次保存消息之前)。此外,您还可以使用RDOMail.CopyTo()方法传递另一个消息或文件夹来复制消息数据。
在OOM级别上,唯一的方法是创建一个PostItem对象(它是唯一一个在已发送状态下创建的对象),将其MessageClass属性重置为"IPM.Note",保存它,释放它,然后使用Namespace.GetItemFromID重新打开它,将其作为一个处于已发送状态的MailItem对象重新打开。
在赎回中,您需要做的就是
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
YourOutlookMailItem.Save
set SourceMsg = Session.GetRDOObjectFromOutlookObject(YourOutlookMailItem)
set TargetMsg = Session.GetDefaultFolder(olFolderSentMail).Items.Add("IPM.Note")
TargetMsg.Sent = true
SourceMsg.CopyTo(TargetMsg)
TargetMsg.Savehttps://stackoverflow.com/questions/14993382
复制相似问题