outlook vsto 加载项找不到联系人

问题描述 投票:0回答:1

我正在尝试使用电子邮件在给定文件夹

email
中使用此方法进行搜索
folder
来查找给定联系人

    private static ContactItem FindContactByEmail(MAPIFolder folder, string email,string email2)
    {
        string filter = $"[Email1Address]='{email}'";
        $" used search filter [{filter}]".AddToLog();
        try
        {
            var result = folder.Items.Find(filter);// i tried folder.Items.Restrict(filter) too
            if (result!=null)
            {
                return result;
            }
            else
            {
                $"can't find {email} at {folder.FullFolderPath}".AddToLog();
            }
        }
        catch(System.Exception r)
        {
            $"exception at FindContactByEmail {r.Message}".AddToLog();
        }
        // If the contact was not found in the current folder, search in its subfolders
        foreach (MAPIFolder subfolder in folder.Folders)
        {
            var contact = FindContactByEmail(subfolder, email,email2);
            if (contact != null)
            {
                return contact;
            }
        }
        return null;
    }

我仔细检查了该联系人是否存在于我的文件夹中,但该方法找不到它,它只能在收件人缓存文件夹中找到它,缺少所有联系方式(例如电话号码)

outlook outlook-addin
1个回答
0
投票

如果联系人是从 GAL 条目创建的,

Email1Address
将包含 EX 类型地址,而不是 SMTP。您可以:

  1. 搜索 EX 地址(AddressEntry.Address 会给你)
  2. 从联系人的 SMTP 地址特定属性中搜索 -
    Email1OriginalDisplayName
    。它不是由
    ContactItem
    对象直接公开的,但如果您单击“消息”按钮,您可以在 OutlookSpy(我是其作者)中看到它。在OOM中可以通过
    ContactItem.Property.GetProperty
    访问; DASL 属性名称为
    http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/8084001F
    。如果您需要使用
    Items.Find/Restrict
    搜索该属性,则需要使用 @SQL 语法:
 string filter = $"@SQL=""http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/8084001F""='{email}'";
© www.soinside.com 2019 - 2024. All rights reserved.