在VSTO C#中获取名字和姓氏

问题描述

在执行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之后,我发现上面的代码正在获取“显示为”字段(在联系人窗口内,请参见下图),并对其进行操作,这不是提取姓氏和名字的正确方法。

在“检查全名”窗口中,我正确地分离了所有详细信息(请参见下图),这是实际要求。

那么,如何从“检查全名”窗口中获取“第一”和“最后”的值?还是我们有更好的方法呢?

请参考此图片:

enter image description here

解决方法

首先,您正在访问mailItem.Recipients[1].AddressEntry.GetExchangeUser()三次(!!!)。只需执行一次-这段代码最终每次都会检索6个(!!!)全新的COM对象。

第二,如果收件人是联系人而不是GAL用户,请使用AddressEntry.GetContact()(请仅执行一次)-一旦​​拥有ContactItem对象,就可以使用其{{1} }和FirstName属性。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...