使用RDCOMClient模糊搜索Outlook收件箱主题并获取附件
在RDCOMClient中实现Outlook主题的模糊查询获取附件
嘿,我来帮你搞定这个模糊匹配的问题!你现在已经能处理单封精确匹配的邮件,但因为主题带动态日期时间,需要匹配前半部分固定内容对吧?其实Outlook的AdvancedSearch支持用LIKE操作符做模糊查询,用%作为通配符就行,具体操作如下:
修改模糊查询的搜索语句
原来的精确匹配是完全等于某个固定主题,现在要匹配以test email executed at开头的所有主题,只需要把查询条件改成带LIKE和%的形式:
%在这里代表任意长度的字符(包括空字符),放在固定内容后面就会匹配所有以这段内容开头的主题,不管后面的日期时间是什么。
修改后的完整代码示例:
library(RDCOMClient) # 初始化Outlook应用 outlook_app <- COMCreate("Outlook.Application") # 执行模糊搜索:匹配主题以"test email executed at"开头的收件箱邮件 search <- outlook_app$AdvancedSearch( "Inbox", "urn:schemas:httpmail:subject LIKE 'test email executed at%'" )
补充:等待搜索完成并处理结果
因为AdvancedSearch是异步执行的,直接获取结果可能为空,所以需要加一段等待逻辑,之后再循环处理每封匹配到的邮件和附件:
# 等待搜索完成(循环检查结果数量,直到有结果返回) while (search$Results$Count() == 0) { Sys.sleep(1) # 每隔1秒检查一次 } # 获取所有匹配的邮件结果 results <- search$Results # 遍历结果处理每封邮件的附件 for (i in 1:results$Count()) { current_email <- results$Item(i) cat("找到匹配邮件:", current_email$Subject(), "\n") # 处理该邮件的附件 email_attachments <- current_email$Attachments() if (email_attachments$Count() > 0) { for (j in 1:email_attachments$Count()) { attachment <- email_attachments$Item(j) # 自定义附件保存路径(这里用当前工作目录) save_path <- file.path(getwd(), attachment$FileName()) attachment$SaveAsFile(save_path) cat("已保存附件到:", save_path, "\n") } } else { cat("该邮件无附件\n") } }
额外提示
- 如果需要匹配包含某段内容的主题(不管位置),可以写成
urn:schemas:httpmail:subject LIKE '%test email executed at%' - 如果需要匹配以某段内容结尾的主题,写成
urn:schemas:httpmail:subject LIKE '%test email executed at' - 注意查询字符串里的主题内容要用单引号包裹,这是Outlook搜索语法的要求
内容的提问来源于stack exchange,提问作者Ed Cunningham
相关产品推荐
相关产品推荐

