我正在尝试使用电子邮件在给定文件夹
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;
}
我仔细检查了该联系人是否存在于我的文件夹中,但该方法找不到它,它只能在收件人缓存文件夹中找到它,缺少所有联系方式(例如电话号码)
如果联系人是从 GAL 条目创建的,
Email1Address
将包含 EX 类型地址,而不是 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}'";