在.pst文件中获取邮件的多个地址

时间:2014-07-23 16:40:52

标签: c# asp.net outlook interop office-interop

我已经通过C#成功读取了.pst文件。

问题是如果邮件有多个收件人(即发件人电子邮件地址),那么我无法获得这些多个地址。用代码

Outlook.Application app = new Outlook.Application();
            Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
            outlookNs.AddStore(@"D:\pst\Test.pst");
            Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail);
            List<MailItem> lstMails = emailFolder.Items.OfType<MailItem>().Where(x=>x.SenderEmailAddress.Contains("hari")).Select(x=>x).ToList();
            foreach (Object obj in emailFolder.Items)
            {
               if(obj is MailItem)
                {
                    MailItem item = (MailItem)obj;
                    Console.WriteLine(item.SenderEmailAddress + " " + item.Subject + "\n" + item.Body);
                }
            }

item.SenderEmailAddress为多个收件人返回一个非常奇怪的地址,如果我已经创建了一组人并向他们发送邮件,那么也是。

因此,任何人都可以指导如何阅读这些多个地址以及该组的名称。

提前致谢。

2 个答案:

答案 0 :(得分:1)

试试这个

    Outlook.Application app = new Outlook.Application();
    Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
    outlookNs.AddStore(@"D:\pst\Test.pst");
    Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail);
    List<MailItem> lstMails = emailFolder.Items.OfType<MailItem>().Where(x=>x.SenderEmailAddress.Contains("hari")).Select(x=>x).ToList();
    foreach (Object obj in emailFolder.Items)
    {
       if(obj is MailItem)
        {
            MailItem item = (MailItem)obj;
           String user=String.Empty;
            foreach (Object obj1 in ((dynamic)item).Recipients)
            {
                user += ((dynamic)obj1).Name + ";";
            }
            Console.WriteLine(user + " " + item.Subject + "\n" + item.Body);
        }
    }

这对我有用。

答案 1 :(得分:0)

请注意,不要将LINQ与Outlook一起使用。它可能在您的代码中看起来很酷,但您需要意识到所有处理都是在客户端完成的,它与显式循环文件夹中的所有项目没有任何不同。 使用Items.Restrict或Find / FindNext - 搜索将由商店提供商执行。