我正在尝试from,to和cc字段的电子邮件地址。有时这些是AD电子邮件,SMTP或分发电子邮件。
我发现有人在这里遇到类似的问题,但他们没有任何关于分发列表的信息。
我稍微修改了代码以尝试获取此值。
if (type.ToLower() == "ex")
{
recip = Globals.ThisAddIn.Application.GetNamespace("MAPI").CreateRecipient(address);
if (recip.DisplayType == OlDisplayType.olDistList)
{
sAddress = recip.AddressEntry.GetExchangeDistributionList().PrimarySmtpAddress;
}
else
{
sAddress = recip.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
}
}
else
{
sAddress = address.Replace("'", "");
}
问题是recip.DisplayType
为空,除非在获取收件人并在该对象上调用DisplayType后出现小延迟。
有更好的方法吗?
我将代码更改为以下内容,但我担心这不适用于所有DisplayTypes,我甚至不确定大多数类型是什么(这里显示选项http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.oldisplaytype%28v=office.14%29.aspx)
private static string GetSmtpAddress(AddressEntry addressEntry)
{
string address;
if (addressEntry.Type == "ex")
{
if (addressEntry.DisplayType == OlDisplayType.olDistList)
{
address = addressEntry.GetExchangeDistributionList().PrimarySmtpAddress;
}
else
{
address = addressEntry.GetExchangeUser().PrimarySmtpAddress;
}
}
else
{
address = addressEntry.Address;
}
return address;
}
答案 0 :(得分:1)
您需要先解析收件人 - 在调用CreateRecipient后,调用Recipient.Resolve。