R:使用RDCOMClient

时间:2019-05-27 08:40:55

标签: r email for-loop rdcomclient

我有一个名称和邮件的数据框,我想创建一个循环,其中R使用RDCOMClient库将邮件发送给所有这些人,但带有他们各自的名字。 数据帧是

df <- data.frame("Name" = c("Name1", "Name2"), "Mail" = c("mail1@mail.com", "mail2@mail.com"))

正如我刚刚在考试项目中使用Python一样,我多次使用多个变量创建了循环,例如:

for i,j in zip(df[1], df[2])

理想情况下,我的代码是


for (mail in df$Mail, name in df$Name) {

  outApp <- COMCreate("Outlook.Application")
  outMail = outApp$CreateItem(0)

  outMail[["To"]] = mail
  outMail[["subject"]] = "Subject"
  outMail[["body"]] = paste(" Dear", name, "\n \n bla bla bla.")

  outMail$Send()

  Sys.sleep(0.5)

  if (mail == df$Mail[-1]) cat("Done!")
}

但是,这会导致错误。

我要使用循环的原因有两个:

  1. 我希望R在开始下一次迭代之前先暂停一下(我不知道这是否确实必要,但是如果我的数据帧中有一百多封邮件,那就更好了-我在这里可能是错的)。
  2. 我希望R打印消息“完成!”。完成后。

如果您还有其他建议(我在lapply,sapply等程序包上看到了一些建议),它们非常欢迎!

我希望外面有人知道该怎么做。

预先感谢

Emil

1 个答案:

答案 0 :(得分:0)

我无法重现您的问题,因为我不在Windows上,但这是使用软件包mailR的示例。

library(mailR)
library(purrr)
df <- tibble("Name" = c("Name1", "Name2"), "Mail" = c("mail1@mail.com", "mail2@mail.com"))

mail_fun <- function(name, mail){
send.mail(from = "sender@gmail.com",
          to = mail,
          subject = "Subject of the email",
          body = paste(" Dear", name, "\n \n bla bla bla."),
          smtp = list(host.name = "aspmx.l.google.com", port = 25),
          authenticate = FALSE,
          send = TRUE)

  Sys.sleep(0.5)

  print("Done!")

}

mail_fun("filip", "filip.wastberg@ferrologic.se")

map2(df$Name, df$Mail, ~mail_fun(name = .x, mail = .y))

这应该使您全面了解如何将代码放入函数中,然后使用purrr遍历data.frame。