【问题标题】:Getting multiple address for a mail in .pst files在 .pst 文件中获取邮件的多个地址
【发布时间】:2014-07-23 16:40:51
【问题描述】:

我已经通过 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 为多个收件人返回一个非常奇怪的地址,如果我已经创建了任何一组人并向他们发送邮件,那么也是。

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

提前致谢。

【问题讨论】:

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


    【解决方案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);
            }
        }
    

    这对我有用。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-02-07
        • 2015-01-05
        • 2016-11-01
        • 1970-01-01
        • 2019-11-27
        • 2018-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多