【问题标题】:Getting email address from a Recipient object从 Recipient 对象获取电子邮件地址
【发布时间】:2017-01-16 09:50:42
【问题描述】:

我正在开发一个 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 毫秒。有没有其他有效的方法可以从 Recepient 对象中识别电子邮件地址?

【问题讨论】:

    标签: vsto outlook-addin


    【解决方案1】:

    所选索引嵌入在 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 = 其他传真。

    【讨论】:

    • 在 EntryID 中,我得到一个很长的字符串,例如“00000000FE42AA0A18C71A.......”。我真的不知道如何将其解读为您在上面指定的十六进制值。
    • 在那个十六进制字符串中,2个字符代表一个字节:00000000FE42AA0A18C71A = 0x00,0x00,0x00,0x00,0xFE,0x42,0xAA,0x0A,0x18,0xC7,0x1A
    • 如何检索 OAB 条目 ID?
    • 来自 EntryID 属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2011-03-27
    • 2013-04-18
    • 2015-11-23
    相关资源
    最近更新 更多