如何在Windows中发送带有R附件的电子邮件

aha*_*ala 52 email r sendmailr

我有一个从Windows机器运行的预定R脚本.

完成后,我希望此脚本自动发送附带一些日志文件的电子邮件.

使用shell()其他一些脚本可能是可能的,但我想知道R内是否有更好的解决方案.谢谢.

ARo*_*son 45

sendmailR在Windows 7上为我工作.我引用了http://cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf

smtpServer = Outlook 2010的信息位于文件 - >帐户设置 - >帐户设置 - >双击您的帐户 - >"服务器"框中的文本

library(sendmailR)

#set working directory
setwd("C:/workingdirectorypath")

#####send plain email

from <- "you@account.com"
to <- "recipient@account.com"
subject <- "Email Subject"
body <- "Email body."                     
mailControl=list(smtpServer="serverinfo")

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

#####send same email with attachment

#needs full path if not in working directory
attachmentPath <- "subfolder/log.txt"

#same as attachmentPath if using working directory
attachmentName <- "log.txt"

#key part for attachments, put the body and the mime_part in a list for msg
attachmentObject <- mime_part(x=attachmentPath,name=attachmentName)
bodyWithAttachment <- list(body,attachmentObject)

sendmail(from=from,to=to,subject=subject,msg=bodyWithAttachment,control=mailControl)
Run Code Online (Sandbox Code Playgroud)

此外,可以通过将另一个mime_part添加到msg列表来发送多个文件,如下所示(我也将其压缩):

attachmentObject <- mime_part(x="subfolder/log.txt",name="log.txt")
attachmentObject2 <- mime_part(x="subfolder/log2.txt",name="log2.txt")
bodyWithAttachment <- list(body,attachmentObject,attachmentObject2)
Run Code Online (Sandbox Code Playgroud)

  • 我不知道.试试看吧. (2认同)
  • 如何为gmail配置serverinfo部分? (2认同)

And*_*eas 15

使用mailR - 它与身份验证,附件一起使用,它会自动发送txt消息以及html等.

mailR需要rJava,有时可能会有点痛苦.在Windows上我没有遇到任何问题.在ubuntu上,这解决了我遇到的一个问题:

sudo apt-get install openjdk-jdk 
Run Code Online (Sandbox Code Playgroud)

在R

install.packages("devtools", dep = T)
library(devtools)
install_github("rpremraj/mailR")
Run Code Online (Sandbox Code Playgroud)

(如果你在rJava上遇到麻烦 - 试试sudo R CMD javareconf终端)

mailR 很容易使用并在github页面上有详细记录.

文档中的示例

library(mailR)
send.mail(from = "sender@gmail.com",
          to = c("recipient1@gmail.com", "recipient2@gmail.com"),
          subject = "Subject of the email",
          body = "Body of the email",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "gmail_username", passwd = "password", ssl = TRUE),
          authenticate = TRUE,
          send = TRUE,
          attach.files = c("./download.log", "upload.log", "https://dl.dropboxusercontent.com/u/5031586/How%20to%20use%20the%20Public%20folder.rtf"),
          file.names = c("Download log.log", "Upload log.log", "DropBox File.rtf"), # optional parameter
          file.descriptions = c("Description for download log", "Description for upload log", "DropBox File"), # optional parameter
          debug = TRUE)
Run Code Online (Sandbox Code Playgroud)

注意:您的smtp服务器可能会发现过度使用可疑.例如gmail就是这种情况.因此,在发送几封邮件后,您可能需要登录Gmail帐户并查看该帐户是否已被暂时禁用.另请注意,如果您使用具有双因素身份验证的Gmail帐户,则需要使用特定应用程序的密码.


chr*_*ler 10

你愿意接受推特消息吗?您可以使用Rcurl向Twitter发布更新,然后可以将其作为文本转发到您的手机,或通过通知设置转发到您的电子邮件.

见这里:http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/

  • 有一个名为twitteR的CRAN软件包用于连接来自R的twitter:http://cran.r-project.org/web/packages/twitteR/index.html (4认同)

Ste*_*edy 6

你看过sendmailR包装了吗?它允许SMTP提交消息,您可以编辑该功能以允许附件.然后,再次,如果它只有一个日志文件,它可能是值得它shell()如你提到的那样使用.