【问题标题】:How can I access an email and get the inbox messages via pop3 or imap using R language?如何使用 R 语言通过 pop3 或 imap 访问电子邮件并获取收件箱消息?
【发布时间】:2018-01-24 15:46:26
【问题描述】:

如果我想使用 R、pop3 或 imap 检查 Outlook 电子邮件的收件箱,我该怎么做? 我需要(自动)从电子邮件收件箱下载一些附件到 RStudio

【问题讨论】:

  • 我没有看到任何当前的 R 包;但是你为什么想要?
  • @Max 我需要(自动)从收件箱下载一些附件到 RStudio
  • 您能不能用其他语言(如 Python 或 Java)编写脚本,并将它们放在文件系统中的某个位置供 R 访问?
  • 也许是一种选择

标签: r imap pop3


【解决方案1】:

很抱歉回答迟了,但它可能对未来的访问者有用。

从 2019 年开始,您可以使用 mRpostman 从 R 内部执行 IMAP 命令。可以进行邮箱操作、邮件搜索和提取等。从 0.3.0 版本开始,您也可以下载附件。

2021 年 3 月编辑

从 v0.9.X 版本开始,mRpostman 开始采用R6 语法。因此,以前版本中的大部分函数都变成了方法。这意味着它们现在应该以connection_object$method() 方式调用。

一个简单的(更新的)示例,说明如何下载附件并结合使用日期标准(在特定日期发送的消息)搜索以前的消息:

步骤 1) 配置与 Outlook 服务器的连接:

请注意,URL "imaps://outlook.office365.com" 是使用 Office 365 的服务器的默认值。

con <- configure_imap(url="imaps://outlook.office365.com",
                  username="your_user@company.com",
                  password=rstudioapi::askForPassword())

#  other IMAP providers that were tested: Hotmail ("imaps://imap-mail.outlook.com"),
#  Gmail (imaps://imap.gmail.com), Yahoo (imaps://imap.mail.yahoo.com/), 
#  AOL (imaps://export.imap.aol.com/), Yandex (imaps://imap.yandex.com)

步骤 2) 选择“收件箱”文件夹

con$select_folder(name = "INBOX")

步骤 3) 按特定条件/条件搜索消息,例如在特定日期收到的消息

res1 <- con$search_on(date_char = "02-Jan-2020")

第 4 步)备选方案 1:获取邮件内容(文本或正文)+ 提取附件

con$fetch_text() %>% # or with fetch_body()
  con$get_attachments()

第 4 步)备选方案 2:直接获取附件

con$fetch_attachments()

使用管道%&gt;% 运算符的不同方法:

con$search_on(date_char = "02-Jan-2020") %>%
  con$fetch_text() %>% # or with fetch_body()
  con$get_attachments()

# OR

con$search_on(date_char = "02-Jan-2020") %>%
  con$fetch_attachments()

因此,在所有这些示例中,mRpostman 将创建一个“user@server.com/INBOX”目录,其中包含与您的消息(或消息)ID 匹配的子文件夹。在子文件夹中,您会遇到附件。

注意:如果您尝试获取大文件(进而获取大消息),可能需要在 configure_imap() 中增加 timeout_ms 和/或 buffersize 参数。

mRpostman的功能详细介绍请参考包官网:https://allanvc.github.io/mRpostman/

编辑 2:

询问是否可以按时间戳进行搜索。尽管 IMAP 协议不支持这种搜索,但有一种 hacky 方法可以实现这一点。假设我们想要搜索自“2021 年 3 月 3 日”以来恰好在“上午 07:30”收到的所有消息。

con$search(AND(
   since(date_char = "03-Mar-2021"),
   string(expr="07:30", where = "HEADER Date")
))

【讨论】:

  • 谢谢艾伦!是否可以根据日期/时间戳进行搜索?
  • 我在运行此代码以获取电子邮件附件时收到以下错误:get_attachments(.) 中的错误:找不到函数“get_attachments”。
  • 关于你提到的错误,是因为我的回答已经过时了。从 0.9.X 版本开始,mRpostman 使用 R6 语法。我的答案现在使用新的语法方法进行了更新,包括一个基于日期的搜索示例。如果有用,请不要忘记点赞。谢谢!
  • 嗨,马特。不客气!可以按日期搜索,但不能按时间戳搜索。根据 RFC 3501,IMAP 协议不支持这种类型的搜索。但是,有一个 hacky 方法可以通过 since/before/on() + string() 的自定义搜索组合来实现此目的。我已将其添加到上面的答案中。
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2020-09-14
  • 2017-09-23
  • 2011-11-02
  • 2020-02-26
相关资源
最近更新 更多