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

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

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

【问题讨论】:

    标签: r email outlook rdcomclient


    【解决方案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']]
    }
    

    【讨论】:

    • 谢谢萨西什!有没有办法更新此代码,以便您阅读其中一封电子邮件的附件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多