Outlook.MAPIFolder.Items.Find 当域中有数字时返回 null?

Outlook.MAPIFolder.Items.Find returning null when domain has a number in it?

我正在尝试在 outlook 文件夹中查询发件人地址中包含特定字符串的电子邮件。我当前的查询如下所示:

"@SQL=\"urn:schemas:httpmail:fromemail\" like '%isc2.org%'"

这几乎适用于我抛出的每个域,但对于上面的特定域,它会犹豫不决 return None。我已经检查了电子邮件的 header,以验证 FROM 确实来自 ics2.org,而不是代表或类似的邮件。搜索源自 add-in,它打开了一封电子邮件并查询其发件人信息,并根据电子邮件的 parent MAPIFolder 确定要搜索的文件夹;因此该文件夹不可能没有来自该域的任何电子邮件,因为我必须物理打开一个以启动使用此查询的插件的操作。这里还有一个 code-snippet 的查询内容:

var folder = mailItem.Parent as Outlook.MAPIFolder;
string address = mailItem.Sender.Address;
if (mailItem.SenderEmailAddress != null && address != mailItem.SenderEmailAddress)
{
    address = mailItem.SenderEmailAddress;
}
filter = "@SQL=\"urn:schemas:httpmail:fromemail\""
         + " like  \'%" + address + "%\'";
var resultItem = folder .Find(filter);
while(resultItem != null){
    ...do stuff...
    resultItem = folderItems.FindNext();
}

公平地说,这只是我的假设,即域中的数字是此类查询的问题,但我没有在我的电子邮件中跨越另一个包含数字的域来获取更多证据支持那个理论。任何一般的建议都将受到赞赏!

尝试使用 urn:schemas:httpmail:sender 属性 代替:

filter = "@SQL=\"urn:schemas:httpmail:sender\"
         + " like  \'%" + address + "%\'";

filter = "@SQL=\"urn:schemas:httpmail:sender\"
         + " like  \"%" + address + "%\"";

您也可以尝试使用词组匹配运算符:

filter = "@SQL=\"urn:schemas:httpmail:sender\"
         + " ci_phrasematch \'%" + address + "%\";

如果它不起作用,我建议您手动在 Outlook 中使用过滤器设置。然后您可以找到所需的查询,您可以通过编程方式将其应用于 Outlook 为您生成的筛选。

BTW Outlook 生成以下条件:

filter = "@SQL=\"urn:schemas:httpmail:sender\"
         + " LIKE \'%" + address + "%\'";

我在其中一条消息中手动将 PR_SENT_REPRESENTING_EMAIL_ADDRESS 属性 修改为“someuser@isc2.org”,以下查询对我来说工作正常:

@SQL="http://schemas.microsoft.com/mapi/proptag/0x0065001F" like '%isc2.org%'

0x0065001FPR_SENT_REPRESENTING_EMAIL_ADDRESS