我已经通过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为多个收件人返回一个非常奇怪的地址,如果我已经创建了一组人并向他们发送邮件,那么也是。
因此,任何人都可以指导如何阅读这些多个地址以及该组的名称。
提前致谢。
答案 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 - 搜索将由商店提供商执行。