如何使用 R RDCOMClient 检索 Outlook 收件箱电子邮件?

Posted

技术标签:

【中文标题】如何使用 R RDCOMClient 检索 Outlook 收件箱电子邮件?【英文标题】:How to retrieve Outlook inbox emails using R RDCOMClient? 【发布时间】:2017-07-23 06:11:13 【问题描述】:
library(RDCOMClient)
## create outlook object
OutApp <- COMCreate("Outlook.Application")

我想从名为“AUX”的 Outlook 文件夹中检索今天的电子邮件。 解析邮件标题,如果满足特定条件,我想解析邮件内容中的特定字符串。

我设法从 R 写了一封电子邮件并将其发送出去,但到目前为止无法检索电子邮件。

【问题讨论】:

【参考方案1】:

这是我通过反复试验得到的一些示例代码:

library(RDCOMClient)

folderName = "AUX"

## create outlook object
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")

folder <- outlookNameSpace$Folders(1)$Folders(folderName)
# Check that we got the right folder
folder$Name(1)

emails <- folder$Items

# Just doing first 10, get total number with emails()$Count()
for (i in 1:10)

  subject <- emails(i)$Subject(1)
  # Replace "#78" with the text you are looking for in Email Subject line
  if (grepl("#78", subject)[1])
    print(emails(i)$Body())
    break
   

抱歉,但我不知道为什么其中一些 COM 对象需要参数(如 Subject(1)),而另一些则不需要(如 Body())。这在 Outlook 2013 上适用于我,但它也应该适用于从 2007 年开始的所有 Outlook 版本。

要获取有关 Outlook 对象模型的更多信息,我建议您获取 Ken Slovak's Outlook 2007 book(对于更高版本的 Outlook 仍然相关),或者查看我的个人网站 http://www.gregthatcher.com(查看“脚本”部分-- 我已经编译了很多年了。)

【讨论】:

嗨 Greg,$folderName 似乎不是 R 的正确语法,我省略了 $ 符号,但您再次将它用于“文件夹”分配。这是有原因的吗? “$”是个错误。我已经编辑了答案。另外,请确保您没有以管理员身份运行 RStudio。您应该在您的普通帐户下运行 RStudio。 @gpier,我没有给你答案,但我建议你试试 Ken Slovak 的书 amazon.com/Professional-Outlook-2007-Programming-Slovak/dp/…(是的,它很旧,但仍然非常相关),或者联系 Ken Slovak直接在slovaktech.com 你可以像 emails()$Count() 一样获取计数 @ParthKalra,看起来像一个“Exchange”电子邮件地址。这是我很久以前写的一些 VBA 代码,它从 Exchange 地址获取 SMTP 地址:gregthatcher.com/Scripts/VBA/Outlook/GetSmtpAddress.aspx 您可以尝试将此代码转换为 R(这就是我得到上述代码 sn-p 的方式)。【参考方案2】:
folderName = "foldername"

## create outlook object
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")

fld <- outlookNameSpace$GetDefaultFolder(6)

# Check that we got the right folder
fld = fld$folders(folderName)

Cnt = fld$Items()$Count()

emails <- fld$items

df = data.frame(sno = 1:Cnt,Text = "",stringsAsFactors=FALSE)

for(i in seq(Cnt))
  d = as.data.frame(emails(i)$Body(), stringsAsFactors=FALSE)
  df$Text[i] = d[1]
  df$Sender[i] = emails(i)[['SenderName']]
  df$To[i] = emails(i)[['To']]
  df$sub[i] = emails(i)[['subject']]

【讨论】:

谢谢萨西什!有没有办法更新此代码,以便您阅读其中一封电子邮件的附件?

以上是关于如何使用 R RDCOMClient 检索 Outlook 收件箱电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

阅读电子邮件附件到R

如何使用 R 和 dplyr 从 Redshift 检索超过 100000 行

如何从 R 中的 GLM 调用中检索原始变量名称的列表?

R Shiny 如何在根据用户选择从 mysqlDB 检索数据时使用 renderPlot 构建条形图

如何使用特定领域短语的字典/模型调整检索和排名排名器?

如何将 .out 文件从包括 120 个子文件夹的文件夹中复制到新文件夹中,其中还包括 120 个子文件夹? (通过使用 Python、Bash 或 R)