暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

R 语言下载邮件附件

宇飞的世界 2022-05-28
694

有时需要通过邮件交互外部数据,下载邮件中附件作为数据源是日常操作。我日常使用 R 较多,希望能通过 R 包解决该问题,通过查找发现mRpostman
包通过 IMAP 客户端可以搜索消息、附件提取、邮件管理等功能。

mRpostman 官网:https://allanvc.github.io/mRpostman/

安装

mRpostman 包在CRAN上,可直接安装
    install.packages("mRpostman")



    案例

    邮件附件下载需求,如不关心细节可以通过以下代码简单配置邮箱下载邮件附件。

    下面代码演示从outlook邮箱收件箱中下载 2022-05-28 号全部邮件附件。其中password改成相应邮箱密码即可。

      library(mRpostman)
      con <- configure_imap(url="imaps://outlook.office365.com",
      username="zyf19940501@outlook.com",
      password= readLines('password'))


      con$select_folder(name = "INBOX")
      con$search_on(date_char = "28-May-2022") |>
      con$fetch_attachments()

      如果是其他的邮箱,需要找到相应的邮箱服务器地址;大众邮箱可以通过搜索引擎获取,公司邮箱的imap地址找公司的IT人员询问。


      登录登录邮箱

      详尽的使用信息请查阅官网[1],使用 outlook 365 邮箱和189 天翼邮箱作为演示邮箱。

      • • outlook office 365


        library(mRpostman)


        # 配置IMAP 连接
        con <- configure_imap(url="imaps://outlook.office365.com",
        username="zyf19940501@outlook.com",
        password= readLines('password'))
        # 服务器可用功能
        con$list_server_capabilities()

        outlook 邮箱 imap:outlook.office365.com

        163邮箱:imap.163.com

        qq邮箱:imap.qq.com

        • • 天翼邮箱


          con <- configure_imap(url="imaps://imap.189.cn",
          username="19908418420@189.cn",
          password= readLines('password'))

          天翼邮箱imap 地址:imap.189.cn 

          天翼邮箱帮助中心:http://help.189.cn/client/client.html

          查找邮件

          查找邮件前,我们要进入相应文件夹,以收件箱为例:

            # 选择收件箱
            con$select_folder(name = "INBOX")
            • • 邮箱文件夹

            通过以下代码列出邮箱可用的文件夹

              con$list_mail_folders()

              当我们收到的邮箱在垃圾箱时,需要切换到垃圾邮件文件夹

                con$select_folder(name = "junk")
                • • 筛选邮件

                进入正确的文件夹后,我们需要通过相应的条件筛选邮件,如下所示:


                  # 通过日期筛选
                  con$search_on(date_char = "28-May-2022")
                  # 通过发件人
                  # TO SUBJECT
                  con$search_string(expr = "19908418420@189.cn" ,where = "FROM")
                  # 通过正文内容
                  con$search_string(expr = 'test',where = 'BODY')
                  # 通过标识
                  con$search_flag(name = c("ANSWERED", "Seen"), use_uid = TRUE)
                  # 多条件
                  con$search(request = AND(string(expr = "Kansas State University", where = "SUBJECT"),
                  before(date_char = "02-Jan-2020")))

                  注意日期格式 

                  搜索表达式暂时不支持中文

                  获取邮件附件

                  下载邮件附件有两种方式,如下所示:

                  • • 方法一

                    con$search_on(date_char = "28-May-2022") |>   
                    con$fetch_text() |>
                    con$get_attachments()
                    • • 方法二

                      con$search_on(date_char = "28-May-2022") |> 
                      con$fetch_attachments()

                      解析邮件正文

                      邮件正文解析有一些复杂,如无必要,可不解析。

                      con$search_on(date_char = "28-May-2022") |> 
                        con$fetch_text(write_to_disk = T)

                      通过上述代码获取到邮件正文,如下所示:

                      将中间一段base64解码后即可得到正文内容

                        str <- "PGh0bWw+PGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
                        eHQvaHRtbDsgY2hhcnNldD11dGYtOCI+PC9oZWFkPjxib2R5PjxwPjxicj7mtYvor5XkuLvpopg8
                        L3A+PC9ib2R5PjwvaHRtbD4="


                        base64enc::base64decode(what = str) |>
                        rawToChar()

                        结果如下所示,和收件箱中邮件正文一致。

                        在线解析网址:https://base64.us/,可以将上述字符放到网址中解码。

                        引用链接

                        [1]
                         官网: https://allanvc.github.io/mRpostman/

                        [2]  解析 :https://base64.us/


                        文章转载自宇飞的世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论