【发布时间】:2014-11-24 05:46:36
【问题描述】:
我在尝试从 Outlook 插件获取已发送消息时遇到一些问题。
在 onItemSend 事件中,我打开一个对话框,其中显示了一些字段,其中包含收件人、主题等消息信息以及将这些信息保存到我们的数据库中的按钮。另一个要求是保存已发送消息的副本,这就是我卡住的地方......
我可以使用 SaveAs 方法保存消息,但问题是当我打开消息时,它显示:
此消息尚未发送。此消息将通过发送 微软交换
给用户造成一些问题,让他们认为消息没有发送。
在搜索过程中,我发现 this thread 另一个人遇到了同样的问题,解决方案是在 PostItem 在已发送状态下创建后,将消息用作 PostItem 而不是 MailItem。另外,我们应该将 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消息,它会在收件箱文件夹中创建一条已读消息
保存邮件后,我比较了文件和重要的大小,原始邮件大小为 580kb,postitem 保存的邮件为 52kb。好像没有复制邮件
它丢失了一些嵌入在消息中的图像,例如签名图像,在适当的位置显示一个红色 X。
如何获取/创建具有确切消息内容、收件人、附件、属性等(克隆类型)和已发送状态的消息,而无需在收件箱文件夹中创建另一条消息?
谢谢
【问题讨论】:
-
拜托,我必须实现这样的东西,你能提供我的源代码,或者指出我可以找到解决方案的地方,我需要将一些电子邮件存储到我们的数据库中。你是怎么做到的?
-
请看this。在此示例中,它显示了如何获取传入的电子邮件并对其进行处理。如果您需要发送项目,请添加如下处理程序: this.itemsendhndler = new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); this.Application.ItemSend += itemsendhndler;.让我知道您是否需要其他任何东西。 :)
标签: c# email outlook outlook-addin