我有多个列表,如下所示:
list(structure(list(mail = c("[email protected]", "[email protected]", "[email protected]",
"[email protected]", "[email protected]", "[email protected]", "[email protected]"), file = c("file1.pdf",
"file2.pdf", "file3.pdf", "file4.pdf", "file5.pdf", "file6.pdf",
"file7.pdf")), row.names = c(NA, 7L), class = "data.frame"))
如您所见,这是同一封电子邮件,但有多个与之关联的文件。因此,我想要的是在创建草稿时立即附加所有这些文件,考虑到每封电子邮件的文件数量不会相同。由于这不能直接用
gm_attach_file()
来完成,我正在尝试使用 purrr::reduce()
。
当我执行时:
files_vector <- data.frame(arc= test[[1]][[2]])
purrr::reduce(.x = files_vector, .f = gm_attach_file)
我收到了我要发送的所有文件:
[1] "file1.pdf" "file2.pdf" "file3.pdf" "file4.pdf" "file5.pdf" "file6.pdf" "file7.pdf"
我必须说:
files_vector <- data.frame(arc= test[[1]][[2]])
自从我收到此错误后,不适用于我的原始数据:
Error in mime$parts : $ operator is invalid for atomic vectors
当我运行创建电子邮件的整个代码时,我只是得到一个空草稿,没有收件人,也没有附加文件。
gm_mime()|>
gm_to(sprintf("%s", unique(test[[1]][[1]])))|>
gm_from("[email protected]") |>
gm_subject("The files you requested")|>
gm_html_body(body = paste(glue::glue(
"<h5><b> <b></h5>
<p>
<p> </p>
<p> .</p>"
)))|>
purrr::reduce(.x = files_vector, .f = gm_attach_file)|>
gm_create_draft()
我不知道我是否做错了什么,或者只是
gmailr
对您可以附加到电子邮件的文件数量有所限制。任何反馈将不胜感激。
我必须补充一点,我也回顾了这一点:如何使用 GmailR 包发送多个附件和图像(在邮件中)正文?并且它给出的解决方案根本不起作用。
我没有凭据设置,所以我无法完全测试它,但我认为这应该可行。
library(gmailr)
test <- list(structure(list(mail = c("[email protected]", "[email protected]", "[email protected]",
"[email protected]", "[email protected]", "[email protected]", "[email protected]"),
file = c("file1.pdf",
"file2.pdf", "file3.pdf", "file4.pdf", "file5.pdf", "file6.pdf",
"file7.pdf")),
row.names = c(NA, 7L), class = "data.frame"))
prepare_email <- function(mail, files){
base_email <- gm_mime()|>
gm_to(mail) |>
gm_from("[email protected]") |>
gm_subject("The files you requested")|>
gm_html_body(body = paste(glue::glue(
"<h5><b> <b></h5>
<p>
<p> </p>
<p> .</p>"
)))
purrr::reduce(.x = files, .f = gm_attach_file, .init = base_email)
}
ready_to_send <- test[[1]] |>
dplyr::as_tibble() |>
dplyr::summarise(.by = mail, files = list(file)) |>
purrr::pmap(prepare_email)
我使用
dplyr
创建一对列表(小标题的列)并使用 purrr
来映射它们。 prepare_email
函数首先准备不带附件的基本电子邮件。 然后我使用 purrr::reduce
附加文件。 使用 .init
参数指定基本电子邮件。