如何发送电子邮件附件从R在Windows中

我有一个预定的R脚本从Windows机器运行。 完成后,我希望这个脚本自动发送附加了一些日志文件的电子邮件。 使用shell()和其他一些脚本可能是可行的,但我想知道是否有更好的解决schemeR.谢谢。

sendmailR适用于Windows 7。我引用了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) 

此外,可以通过添加另一个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) 

使用mailR – 它与authentication,附件一起使用,它会自动发送txt消息以及html和更多。

mailR需要rJava有时可能有点痛苦。 在窗户上,我没有任何问题。 在Ubuntu上解决了我遇到的一个问题:

 sudo apt-get install openjdk-jdk 

在R

 install.packages("devtools", dep = T) library(devtools) install_github("rpremraj/mailR") 

(如果你有rJava的麻烦 – 尝试terminal中的sudo R CMD javareconf

mailR很容易处理,并在github页面上logging良好。

来自文档的示例

 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) 

注意:您的smtp服务器可能会发现过度使用可疑。 例如gmail就是这种情况。 所以发送一些邮件后,你可能需要login到Gmail帐户 ,看看是否帐户已被暂时禁用。 另请注意,如果您使用双因素身份validation的Gmail帐户,则需要使用特定于应用程序的密码 。

你会解决一个Twitter消息? 您可以使用Rcurl将更新发布到twitter,然后可以通过通知设置将其更改为文本或发送到您的电子邮件。

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

你有没有看过sendmailR软件包呢? 它允许SMTP提交一个消息,你可能可以编辑该function来允许附件。 然后再一次,如果它只有一个日志文件,它可能就像你刚才提到的那样使用shell()

对于Windows,可以一起parsing一个VB脚本(参见http://www.paulsadowski.com/wsh/cdo.htm ),然后通过shell调用它。

这可能看起来像这样:

 SendMail <- function(from="me@my-server.de",to="me@my-server.de",text="Hallo",subject="Sag Hallo",smtp="smtp.my.server.de",user="me.myself.and.i",pw="123"){ require(stringr) part1 <- "Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). Const cdoAnonymous = 0 'Do not authenticate Const cdoBasic = 1 'basic (clear-text) authentication Const cdoNTLM = 2 'NTLM " part2 <- paste(paste("Set objMessage = CreateObject(",'"',"CDO.Message",'"',")" ,sep=""), paste("objMessage.Subject = ",'"',subject,'"',sep=""), paste("objMessage.From = ",'"',from,'"',sep=""), paste("objMessage.To = ",'"',to,'"',sep=""), paste("objMessage.TextBody = ",'"',text,'"',sep=""), sep="\n") part3 <- paste( "'==This section provides the configuration information for the remote SMTP server. objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/sendusing\") = 2 'Name or IP of Remote SMTP Server objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpserver\") = ",'"',smtp,'"'," 'Type of authentication, NONE, Basic (Base64 encoded), NTLM objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpauthenticate\") = cdoBasic 'Your UserID on the SMTP server objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/sendusername\") = ",'"',user,'"'," 'Your password on the SMTP server objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/sendpassword\") = ",'"',pw,'"', " 'Server port (typically 25) objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpserverport\") = 25 'Use SSL for the connection (False or True) objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpusessl\") = False 'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server) objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout\") = 60 objMessage.Configuration.Fields.Update '==End remote SMTP server configuration section== objMessage.Send ",sep="") vbsscript <- paste(part1,part2,part3,sep="\n\n\n") str_split(vbsscript,"\n") writeLines(vbsscript, "sendmail.vbs") shell("sendmail.vbs") unlink("sendmail.vbs") } 

只是想提醒那些想要自称为twilio服务的自我通知function的人,他们提供免费的服务来发送短信给自己的手机。 使用R的步骤可以在这里https://dreamtolearn.com/ryan/data_analytics_viz/78

附上示例代码,只需用您自己的代码replace凭据。

 library(jsonlite) library(XML) library(httr) library(rjson) library(RCurl) options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) authenticate_twilio <- "https://[ACCOUNT SID]:[AUTH TOKEN]@api.twilio.com/2010-04-01/Accounts" authenticate_response <- getURL(authenticate_twilio) print(authenticate_response) postForm("https://[ACCOUNT SID]:[AUTH TOKEN]@api.twilio.com/2010-04-01/Accounts/[ACCOUNT SID]/Messages.XML",.params = c(From = "+1[twilio phone#]", To = "+1[self phone#]",Body = "Hello from twilio")) 

我不知道R函数或库发送电子邮件。 大多数人会写一个shell脚本或使用system()来调用外部邮件发送者。

一些使用后一种方法的示例代码在这个邮件列表文章中 ,但它使用Unix / Linux邮件命令。 也许可以为Windows编写类似的脚本,也可以在您的机器上安装Cygwin软件包。