使用MS Graph API,我可以看到Outlook电子邮件的ID并设置自定义属性(单值扩展属性- https://learn.microsoft.com/en-us/graph/api/singlevaluelegacyextendedproperty-post-singlevalueextendedproperties?view=graph-rest-1.0)。
是否有办法找到一个特定的电子邮件通过搜索,EmailID或自定义属性与VBA?我似乎不能用'Folder.Items.Restrict()
'
搜索这些属性此外,一旦我得到一个电子邮件项目,我就可以看到我通过MS Graph Api设置的自定义属性。
oItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/string/{10101010-1010-1010-C101-1010101010101010}/myCustomProp")
但是有一种方法可以查询收件箱并找到VBA的特定电子邮件吗?
我尝试使用Restrict()和PropertyAccessor,但他们似乎没有解决我的问题。
您可以使用Items.Find/Restrict
使用其DASL名称搜索属性。使用像
@SQL="http://schemas.microsoft.com/mapi/string/{10101010-1010-1010-C101-1010101010101010}/myCustomProp" = 'some value'
请注意,DASL名称必须加引号,所以在VBA中它将是
set item = SomeFolder.Items.Find("@SQL=""http://schemas.microsoft.com/mapi/string/{10101010-1010-1010-C101-1010101010101010}/myCustomProp"" = 'some value'")
二进制属性(如EntryID
等)不支持在Outlook中搜索项目。最好的方法是搜索带有自定义属性的项。例如,您将使用以下过滤器搜索名为"妈妈的礼物"的自定义属性。包含字pearls
:
filter = "@SQL=" & Chr(34) & _
"https://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/" _
& "Mom%27s%20%22Gift%22" & Chr(34) & " like '%pearls%'"
注意,我们使用Chr(34)
函数用双引号解决了这个问题。阅读更多关于使用字符串比较过滤项的文章。
要在Outlook文件夹中搜索与您的条件对应的项目,您可以使用Items
类的Find
/FindNext
或Restrict
方法。您可以在我为技术博客写的文章中阅读更多关于它们的内容:
- 如何:使用Restrict方法从文件夹 中检索Outlook邮件项目
- 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(c#, VB.NET)
但是如果您需要在多个文件夹或子文件夹中搜索项目,您可以考虑使用Application
类的AdvancedSearch
方法。在Outlook中使用AdvancedSearch
方法的主要好处是:
- 在另一个线程中执行搜索。你不需要手动运行另一个线程,因为
AdvancedSearch
方法会在后台自动运行它。 - 可以在任何位置搜索任何项目类型:邮件,约会,日历,笔记等,即超出某个文件夹的范围。
Restrict
和Find
/FindNext
方法可以应用于特定的Items
集合(参见Outlook中Folder
类的Items
属性)。 - 完全支持DASL查询(自定义属性也可以用于搜索)。为了提高搜索性能,如果对商店启用了即时搜索,则可以使用即时搜索关键字(参见
Store
类的IsInstantSearchEnabled
属性)。 - 可以使用
Search
类的Stop
方法随时停止搜索进程。
参见Outlook编程高级搜索:c#, VB。. NET获取更多信息。