【问题标题】:R code not sending email via task scheduler but otherwise runs fineR 代码不通过任务计划程序发送电子邮件,但运行正常
【发布时间】:2016-05-06 07:24:45
【问题描述】:

我有一个 R 代码,经过一系列步骤后,它最终会发送一封电子邮件。当我在 RStudio 上运行它时,整个代码运行良好并发送电子邮件。但是,当我通过 Windows 任务计划程序运行它时,代码仍然可以正常运行(并且按照预期运行),但不会发送电子邮件。 RDCOMClient 和 sendmailR 都试过了,问题依旧。

这是任务的安排方式。

程序/脚本:“C:\Program Files\R\R-3.1.3\bin\x64\Rscript.exe” 添加参数:datavalv3.R 开始于:C:\BLP\Projects\Project_07

这是电子邮件的代码部分(使用 RDCOMClient)

library(RDCOMClient)

path_name <- file.path(mainDir, subDir)
subject <- paste0("Data quality checks completed for ", analysis_date)
body <- paste0("Data summary has been compiled for all the farms for ",    analysis_date,". All the data summaries are saved in the folder <", path_name, ">.")

email_fn <- function(recipient) {

  OutApp <- COMCreate("Outlook.Application")
  outMail = OutApp$CreateItem(0)
  outMail[["To"]] = recipient
  outMail[["subject"]] = subject
  outMail[["body"]] = body
  outMail$Send()  

}

email_fn(recipient = "person1@abc.com")

这是电子邮件的代码部分(使用 sendmailR)

library(sendmailR)  

from <- "person1@abc.com"
to <- c("person2@abc.com","person3@abc.com")
subject <- "Email Subject"
body <- "Email body."                     
mailControl = list(smtpServer = "tucson.websitewelcome.com")

sendmail(from = from, to = to, subject = subject, msg = body, control = mailControl)

知道可能是什么问题吗?

这是一个更新:找出问题所在。在任务调度程序的安全选项中,我之前检查过“无论用户是否登录都运行”。我取消选中此选项并选中“仅在用户登录时运行” - 这成功了,并且电子邮件正在通过。

【问题讨论】:

  • 当脚本作为任务计划程序执行时,您确定库sendmailR 已正确加载吗?我有类似的问题,但在 Linux 上,情况是我在我的个人文件夹中安装了一个包,当调度程序运行它时,它没有找到我的个人文件夹的路径来查找包。因此,可能以普通用户和 Windows 调度程序的身份打印 .libPaths() 的结果并进行比较。
  • 谢谢@bartoszukm。该代码使用了 3 个库(RODBC、data.table 和 sendmailR),所有这些库都位于同一路径中(在我的用户文件夹中)。如果 RODBC 和 data.table 加载正常,sendmailR 可能还不能吗?
  • 你解决过这个问题 Ankur 吗?
  • 有类似的问题。在我的情况下,我需要勾选“无论用户是否登录都运行”。您是否碰巧找到了根本原因?

标签: r email scheduled-tasks sendmailr rdcomclient


【解决方案1】:

当您尝试通过任务计划程序发送电子邮件时,由于某种原因(不知道为什么),它只是跳过了该电子邮件部分。 这是诀窍,尝试使用 taskscheduleR 包。即使您注销,它也会发送电子邮件。请同时安装其他依赖包。

install.packages('data.table')
install.packages('knitr')
install.packages('miniUI')
install.packages('shiny')
install.packages("taskscheduleR", repos = "http://www.datatailor.be/rcube", type = "source")

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 2023-03-25
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多