我正试图从Outlook插件获取发送的邮件时遇到了一些问题。在Outlook Addin中收到发送的邮件
在onItemSend事件,我打开一个对话框,它显示了一些领域,有消息信息,如收件人,主题等,并一个按钮,将保存这些信息进入我们的数据库。另一个要求是,以保存已发送邮件的副本,这是我卡住了...
我可以使用另存为方法保存该消息,但问题是,当我打开该邮件,它显示:
此消息尚未发送。此消息将通过 的Microsoft Exchange
发送导致一些问题的用户,让他们觉得不发送的消息。
在我的搜索期间,我发现this thread其中一个人有同样的问题,并且解决方法是使用邮件作为PostItem而不是MailItem,一旦PostItem被创建为发送状态。此外,我们应该将MessageClass属性设置为IPM.Note并删除PR_ICON_INDEX
下面是我用来执行上述步骤的代码。我发现这个代码here和改变了一点点:
PostItem postItem = this._email.Application.CreateItem(OlItemType.olPostItem);
postItem.MessageClass = "IPM.Note";
PropertyAccessor pa = postItem.PropertyAccessor;
pa.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x10800003", -1);
postItem.Save();
NameSpace session = postItem.Session;
string postItemEntryID = postItem.EntryID;
Marshal.ReleaseComObject(postItem);
Marshal.ReleaseComObject(pa);
MailItem newMessage = session.GetItemFromID(postItemEntryID) as MailItem;
newMessage.BCC = this._email.BCC;
newMessage.Body = this._email.Body;
newMessage.BodyFormat = this._email.BodyFormat;
newMessage.CC = this._email.CC;
newMessage.HTMLBody = this._email.HTMLBody;
//Hard coded path just for illustration
newMessage.SaveAs("C:\\Temp\\MSG\test.msg", OlSaveAsType.olMSG);
上面的代码创建一个postitem对象,设置一些属性并保存到正确的路径,但它有以下问题:
执行postItem.save,创建postitem消息后,它会在收件箱中读取消息
保存的消息后,我比较了文件和S在有意义的情况下,原始邮件大小为580kb,保存后的邮件为52kb。看起来它没有复制消息
它丢失了某些嵌入到消息中的图像,如签名图像,显示了红色的X。
我如何获得/创建消息,用确切的消息内容,收件人,附件,属性等(克隆那种)与发送的状况,而无需创建收件箱文件夹内的另一消息?
谢谢
请,我必须执行这样的事情,你可以提供给我的源代码,或指出我在哪里可以找到解决方案,我需要存储一些电子邮件到我们的数据库。你是怎样做的 ? – 2016-09-06 08:38:13
请看看[this](https://blogs.msdn.microsoft.com/emeamsgdev/2011/12/06/process-incoming-mail-using-an-outlook-addin)。在这个例子中,它展示了如何获取收到的电子邮件并对其进行处理。如果您需要发送项目,请添加如下所示的处理程序:this.itemsendhndler = new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); this.Application.ItemSend + = itemsendhndler ;.让我知道你是否需要任何其他的东西。 :) – UncleFester 2016-09-07 16:13:58