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

Get first and last name in 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(string name) 和 LastName(string name) 方法将 name 分别拆分为 space 和 return 第一个和最后一个元素]

但是,对于某些收件人,它 return 编辑了整个电子邮件地址。 :(

在浏览 Outlook 后,我发现上面的代码正在获取“显示为”字段(内部联系人 window,参考下图),并对其执行操作,这不是正确的方法提取名字和姓氏。

在“检查全名”中 window 我正确分隔了所有详细信息(参考下图),这是实际要求。

那么,如何从“检查全名”Window 中获取“名字”和“姓氏”的值?或者我们有更好的方法吗?

参考这张图片:

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

其次,如果收件人是联系人而不是 GAL 用户,请使用 AddressEntry.GetContact()(请只执行一次)- 一旦您拥有 ContactItem 对象,您可以使用它的 FirstNameLastName 属性。