0

我想使用 vsto Outlook 插件发送电子邮件。

将有来自 DBMS 的多个收件人和有关收件人的数据。在邮件模板中将有一个关键字应替换为个人数据,如姓名、工作职位。并且每封邮件必须只有一个收件人地址,看起来就像我们互相发送邮件一样。

我想给每个人发邮件而不是一起发邮件。我可以取消原始邮件,然后将邮件正文和主题文本逐个发送给每个人。

我注意到“已发送文件夹”中的邮件数量与收件人数量相同。

即使未发送原始邮件,我也希望在“已发送文件夹”中仅看到一封原始邮件(不应发送原始邮件。)

我想我可以在发送所有邮件后从“已发送文件夹”中删除所有邮件并将原始邮件移动到“已发送文件夹”,但未设置标记为“未发送”的原始邮件和提交时间。如何以编程方式使此项目看起来像已发送的邮件。

或者有什么办法可以解决我的问题?

我正在使用 Framework 3.5 开发 Outlook 2007 和 Visual Studio 2010 VSTO。

4

1 回答 1

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
于 2013-02-21T04:52:26.243 回答