我们有一个主系统,该系统生成一个电子邮件信息文件,该文件由中央电子邮件服务器提取,然后由该服务器构建并向我们的客户发送电子邮件。如果地址不正确,则会将NDR电子邮件连同原始电子邮件的.msg附件发送回中央电子邮件服务器。
我希望能够拉入附件并获取电子邮件的原始创建者(存储在原始电子邮件的Reply-To标头中)并将NDR转发给他们。在VB6中,我们能够使用CDO做到这一点,现在我正在使用Outlook 2016 Interop,并且在重新创建代码时遇到了麻烦。
我可以将附件保存到磁盘,然后再读回以获取标头,但我宁愿只读进去。我一直在尝试使用MSMAPI,但运气不佳。我一直在使用OutlookSpy查找标签,我们考虑使用“兑换”,但该公司不想花这笔钱。任何帮助,将不胜感激。 谢谢
代码:
using Outlook = Microsoft.Office.Interop.Outlook;
Outlook.Application OutlookApp = new Outlook.Application();
var session = OutlookApp.GetNamespace("MAPI");
foreach (object oMessage in oInbox.Items)
{
if (oMessage is Outlook.ReportItem reportItem)
{
//this is where I need to get the original sender.
reportItem.Attachments[1].SaveAsFile("c:\\temp\\NDFOrig.msg");
var origMessage= session.OpenSharedItem("c:\\temp\\NDFOrig.msg") as Outlook.MailItem;
string sender = origMessage.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0050001F")
//After we have the sender, forward the NDR message.
}
}