从收件人对象获取电子邮件地址

Getting email address from a Recipient object

我正在开发一个 VSTO 插件,它需要在发送新电子邮件时读取所有电子邮件地址。下面是我现在正在使用的代码,但在少数情况下它不起作用。

                            if (addr.Type == "EX")
                            {
                               if (addr.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry
                                    || addr.AddressEntryUserType == OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
                                {
                                    exch = addr.GetExchangeUser();
                                    smtpAddress = exch != null ? exch.PrimarySmtpAddress : null;
                                }
                                else if (addr.AddressEntryUserType == OlAddressEntryUserType.olOutlookContactAddressEntry)
                                {
                                    cont = addr.GetContact();
                                    //returns the actual contact but it has 3 email properties (Email1Address, Email2Address, Email3Address). 
  //How to identify which email has the user selected
                                }
                            }
                            else if (addr.Type == "SMTP")
                            {
                                smtpAddress = addr.Address;
                            }

如果 AddressEntryUserType 是 olExchangeUserAddressEntry 或 olExchangeRemoteUserAddressEntry,那么代码工作正常。但如果是本地 Outlook 联系人 (olOutlookContactAddressEntry),我不确定如何检索电子邮件地址。 GetContact 方法为我提供了实际联系方式,但由于它有 3 封电子邮件,我不知道如何找到用户在撰写电子邮件时选择的地址。

我已经尝试将基于 Exchange 的电子邮件地址转换为 SMTP,如本论坛所讨论的那样。但它正在产生巨大的性能影响。将一个地址转换为 SMTP 大约需要 300 毫秒。有没有其他有效的方法来识别收件人对象的电子邮件地址?

所选索引嵌入在 OAB 条目 ID 中 - 检查前 20 个字节是否 0x00,0x00,0x00,0x00,0xFE,0x42,0xAA,0x0A,0x18,0xC7,0x1A,0x10,0xE8,0x85,0x0B,0x65,0x1C,0x24,0x00,0x00 字节 25 是类型(0x5 是 DL,0x4 是联系方式)。字节 29 是索引(仅用于联系人):0 = 电子邮件 1,1 = 电子邮件 2,2 = 电子邮件 3,3 = 商务传真,4 = 家庭传真,5 = 其他传真。