我想使用vsto outlook addin发送电子邮件。
将有多个收件人和有关DBMS收件人的数据。 在邮件模板中,将有一个关键字应替换为个人数据,如姓名,工作标题。并且每封邮件上只能有一个收件人地址 我们发送邮件给对方。
我想发送邮件给每个人而不是所有人。我可以取消原始邮件,并逐个发送邮件给邮件正文和主题文本。
我注意到“已发送文件夹”中的邮件数量与收件人数量相同。
我想在“已发送文件夹”中只看到一封原始邮件,即使原始邮件也是如此 未发送(原始邮件不应发送。)
我想我可以在发送所有邮件后将所有邮件从“已发送文件夹”中删除,并将原始邮件移至“已发送文件夹” 但标记为“UnSent”的原始邮件和提交的时间未设置。 如何通过编程方式使此项看起来像发送的邮件。
或者有什么方法可以解决我的问题吗?
我正在使用Framework 3.5处理Outlook 2007和Visual Studio 2010 VSTO。
答案 0 :(得分:0)
首先,要在邮件发送后删除邮件,请将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.Save