当我尝试打印出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)而不是名字?
答案 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));
}
}