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

时间:2016-09-08 12:46:01

标签: vsto outlook-addin

我正在开发一个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,如本论坛所述。但它正在产生巨大的性能影响。一个地址需要大约300毫秒才能转换为SMTP。是否还有其他有效的方法来识别Recepient对象的电子邮件地址?

1 个答案:

答案 0 :(得分:0)

所选索引嵌入在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 = email1,1 = email2,2 = email3,3 =商务传真,4 =家庭传真,5 =其他传真。