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



我正在开发一个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大约需要300ms。是否有其他有效的方法从收件人对象中识别电子邮件地址?

选择的索引嵌入在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是contact)。第29个字节为索引(仅限联系人):0 = email1, 1 = email2, 2 = email3, 3 =业务传真,4 =家庭传真,5 =其他传真

最新更新