获取电子邮件地址而不是名称?

时间:2014-09-10 06:14:52

标签: c# .net outlook interop

当我尝试打印出MailItem中的不同属性时,我看到一些我不理解的行为。而不是电子邮件地址,我看到了名字。

static void ReadMail()
{
     Microsoft.Office.Interop.Outlook.Application app = null;
     Microsoft.Office.Interop.Outlook._NameSpace ns = null;
     Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;

     app = new Microsoft.Office.Interop.Outlook.Application();
     ns = app.GetNamespace("MAPI");

     inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

      for (int counter = 1; counter <= inboxFolder.Items.Count; counter++)
      {
           dynamic item = inboxFolder.Items[counter];
           Console.WriteLine("Sendername: {0}", item.SenderName);
           Console.WriteLine("Sender: {0}", item.Sender);
           Console.WriteLine("To: {0}", item.To);
       }
 }

我的意思是取代“john.doe@email.com”而不是“John Doe”。这可能发生的任何特殊原因?有没有办法获取发件人和收件人的电子邮件地址(To,CC,BCC)而不是名字?

3 个答案:

答案 0 :(得分:3)

不使用To / CC / BCC属性,而是遍历MailItem.Recipients集合中的所有收件人并阅读Recipient.Address属性。您可能还想使用Recipient.Type(olTo / olCC / OlBCC)属性。

foreach (Outlook.Recipient recip in item.Recipients)
{
   if (recip.Type == (int)OlMailRecipientType.olTo)
   {
      Console.WriteLine(string.Format("Name: {0}, address: {1})", recip.Name, recip.Address));
   } 
}

答案 1 :(得分:2)

然后您应该使用item.SenderEmailAddress代替item.SenderName

此外,您可以迭代集合item.Recipients以确定发件人/ TO / CC / BCC地址(类型存储在该集合的每个收件人对象的Type属性中) - 它具有{{1}之一枚举值(olOriginator,olTo,olCC,olBCC)。

答案 2 :(得分:0)

由于我无法评论答案,

你需要强制转换其中一个if成员,否则会说它无法将int类型与OlMailRecipientType进行比较,编译将失败。

这里我将OlMailRecipientType.OlTo投射到int

if (Recip.Type == (int)OlMailRecipientType.olTo)

foreach (Outlook.Recipient recip in item.Recipients)
{
   if (Recip.Type == (int)OlMailRecipientType.olTo)
   {
      Console.WriteLIne(string.Format("Name: {0}, address: {1)", recip.Name, recip.Address));
   } 
}