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

本文关键字:地址 pst 文件 获取 | 更新日期: 2023-09-27 18:14:39

我已经成功地通过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);
                }
            }

项目。SenderEmailAddress为多个收件人返回一个非常奇怪的地址,如果我已经制作了任何一组人并向他们发送邮件,那么也。

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

在.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;
           String user=String.Empty;
            foreach (Object obj1 in ((dynamic)item).Recipients)
            {
                user += ((dynamic)obj1).Name + ";";
            }
            Console.WriteLine(user + " " + item.Subject + "'n" + item.Body);
        }
    }

请注意,不要在Outlook中使用LINQ。这在您的代码中看起来可能很酷,但是您需要认识到所有的处理都是在客户端完成的,这与显式地遍历文件夹中的所有项没有任何不同。使用物品。Restrict或Find/FindNext——搜索将由存储提供者执行。