Een e-mail verzenden met bijlage van R in Windows

Ik heb een gepland R-script dat wordt uitgevoerd vanaf een Windows-computer.

Als het klaar is, wil ik dat dit script automatisch een e-mail stuurt met een logbestand als bijlage.

Het gebruik van shell()met sommige andere scripts is misschien mogelijk, maar ik vroeg me af of er een betere oplossing is binnen R.
Bedankt.


Antwoord 1, autoriteit 100%

sendmailR werkt voor mij op Windows 7. Ik verwees naar http: //cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf

smtpServer= info voor Outlook 2010 staat in Bestand -> Accountinstellingen -> Accountinstellingen -> dubbelklik op uw account -> tekst in het vak “Server”

library(sendmailR)
#set working directory
setwd("C:/workingdirectorypath")
#####send plain email
from <- "[email protected]"
to <- "[email protected]"
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)

Bovendien kunnen meerdere bestanden worden verzonden door als volgt nog een mime_part aan de msg-lijst toe te voegen (ik heb het ook gecomprimeerd):

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)

Antwoord 2, autoriteit 35%

Gebruik mailR– het werkt met authenticatie, bijlagen, het verzendt automatisch een txt-bericht samen met html en meer .

mailRvereist rJava, wat soms lastig kan zijn. Op windows heb ik geen problemen gehad. Op ubuntu loste dit het enige probleem op dat ik had:

sudo apt-get install openjdk-jdk 

in R

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

(als je problemen hebt met rJava – probeer sudo R CMD javareconfin terminal)

mailRis gemakkelijk om mee te werken en goed gedocumenteerd op de github-pagina.

Voorbeeld uit de documentatie

library(mailR)
send.mail(from = "[email protected]",
          to = c("[email protected]", "[email protected]"),
          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)

Opmerking: uw smtp-server kan overmatig gebruik verdacht vinden. Dit is het geval bij b.v. gmail. Dus na het verzenden van een paar e-mails moet je waarschijnlijk inloggen op het gmail-accounten kijken of de account is tijdelijk uitgeschakeld. Houd er ook rekening mee dat als u een Gmail-account met tweefactorauthenticatie gebruikt, u een applicatiespecifiek wachtwoordmoet gebruiken.


Antwoord 3, autoriteit 21%

Zou je genoegen nemen met een twitterbericht? Je zou Rcurl kunnen gebruiken om een ​​update op Twitter te plaatsen, die vervolgens als sms naar je mobiele telefoon kan worden doorgestuurd, of naar je e-mail via de meldingsinstellingen.

Zie hier: http://www. sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/


Antwoord 4, autoriteit 12%

Heb je het pakket sendmailRal bekeken? Hiermee kan SMTP een bericht verzenden en u kunt de functie waarschijnlijk bewerken om een ​​bijlage toe te staan. Aan de andere kant, als het maar één logbestand is, is het misschien de moeite waard om shell()te gebruiken zoals je al zei.


Antwoord 5, autoriteit 8%

Voor Windows kan men een VB-Script samen ontleden (zie bijv. http://www.paulsadowski .com/wsh/cdo.htm) en roep het dan aan via shell.

Dit kan er als volgt uitzien:

SendMail <- function(from="[email protected]",to="[email protected]",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")
}

Other episodes