You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用gmailr批量添加附件创建邮件草稿遇问题求助

解决gmailr批量添加附件创建邮件草稿的问题

核心错误分析

你遇到的问题出在两个关键点:

  1. 文件向量处理错误:把文件列表转成data.frame传给purrr::reduce,但gm_attach_file需要在mime邮件对象上操作,直接传入数据框会导致函数尝试对原子向量调用$操作,触发Error in mime$parts : $ operator is invalid for atomic vectors报错。
  2. 管道逻辑错误:没有将前面构建好的mime对象作为reduce的初始值,导致附件没有被添加到已配置好收件人、主题的邮件对象上,最终生成空草稿。

单个邮箱的修复代码

假设你的数据存储在test列表中,先提取数据框,直接使用文件字符向量,通过reduce的.init参数传递已构建的mime对象,依次添加附件:

library(gmailr)
library(purrr)
library(glue)

# 提取数据框
df <- test[[1]]
# 获取目标邮箱和对应的文件列表
target_mail <- unique(df$mail)
files_to_attach <- df$file

# 创建带所有附件的邮件草稿
gm_mime() %>%
  gm_to(target_mail) %>%
  gm_from("tu@tu.com") %>%
  gm_subject("The files you requested") %>%
  gm_html_body(paste(glue::glue(
    "<h5><b> </b></h5>
    <p>
    <p> </p>
    <p> .</p>"
  ))) %>%
  # 关键:将前面的mime对象作为初始值,依次添加每个文件
  purrr::reduce(.x = files_to_attach, .f = gm_attach_file, .init = .) %>%
  gm_create_draft()

多个邮箱的批量处理方案

如果你的数据包含多个不同邮箱,每个邮箱对应不同数量的附件,可以用dplyr分组后批量生成草稿:

library(dplyr)
library(gmailr)
library(purrr)
library(glue)

# 合并列表中的所有数据框(如果test是多个data.frame的列表)
df <- dplyr::bind_rows(test)

# 按邮箱分组,为每个邮箱创建带对应附件的草稿
df %>%
  dplyr::group_by(mail) %>%
  dplyr::group_walk(function(group_data, current_mail) {
    current_files <- group_data$file
    
    gm_mime() %>%
      gm_to(current_mail) %>%
      gm_from("tu@tu.com") %>%
      gm_subject("The files you requested") %>%
      gm_html_body(paste(glue::glue(
        "<h5><b> </b></h5>
        <p>
        <p> </p>
        <p> .</p>"
      ))) %>%
      purrr::reduce(.x = current_files, .f = gm_attach_file, .init = .) %>%
      gm_create_draft()
  })

补充说明

gmailr本身对附件数量没有限制,只要单封邮件总大小不超过Gmail的默认上限(25MB)即可;如果附件过大,建议使用gm_attach_drive_file挂载Google Drive文件。

内容的提问来源于stack exchange,提问作者Alejandro Carrera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:32:12