问题描述
在执行Reply / ReplyAll操作时,我必须分别获得第一个收件人的名字和姓氏。
目前,我正在这样做:
#region Extracting Last and First Name
string LName = null;
string FName = null;
if (mailItem.Recipients[1].AddressEntry.GetExchangeUser() == null)
{
FName = FirstName(mailItem.Recipients[1].Name);
LName = LastName(mailItem.Recipients[1].Name);
}
else
{
FName = mailItem.Recipients[1].AddressEntry.GetExchangeUser().FirstName;
LName = mailItem.Recipients[1].AddressEntry.GetExchangeUser().LastName;
}
#endregion
[注意:在上述区域中,FirstName(字符串名称)和LastName(字符串名称)方法按名称分隔空格,并分别返回第一个和最后一个元素]
但是,对于某些收件人,它返回了整个电子邮件地址。 :(
浏览Outlook之后,我发现上面的代码正在获取“显示为”字段(在联系人窗口内,请参见下图),并对其进行操作,这不是提取姓氏和名字的正确方法。
在“检查全名”窗口中,我正确地分离了所有详细信息(请参见下图),这是实际要求。
那么,如何从“检查全名”窗口中获取“第一”和“最后”的值?还是我们有更好的方法呢?
解决方法
首先,您正在访问mailItem.Recipients[1].AddressEntry.GetExchangeUser()
三次(!!!)。只需执行一次-这段代码最终每次都会检索6个(!!!)全新的COM对象。
第二,如果收件人是联系人而不是GAL用户,请使用AddressEntry.GetContact()
(请仅执行一次)-一旦拥有ContactItem
对象,就可以使用其{{1} }和FirstName
属性。