在 R 中使用 gmail 发送多个附件

问题描述 投票:0回答:1

我有多个列表,如下所示:

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 包发送多个附件和图像(在邮件中)正文?并且它给出的解决方案根本不起作用。

r loops gmail purrr gmailr
1个回答
0
投票

我没有凭据设置,所以我无法完全测试它,但我认为这应该可行。

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
参数指定基本电子邮件。

© www.soinside.com 2019 - 2024. All rights reserved.