pesados - como enviar un documento por correo gmail
Cómo enviar un correo electrónico con archivo adjunto desde R en Windows (6)
Tengo un script R programado que se ejecuta desde una máquina de Windows.
Después de que termine, deseo que esta secuencia de comandos envíe automáticamente un correo electrónico con algún archivo de registro adjunto.
Usar shell()
con algunos otros scripts puede ser posible, pero me preguntaba si hay una mejor solución dentro de R. Gracias.
¿ sendmailR
paquete sendmailR
? Permite a SMTP enviar un mensaje y probablemente podría editar la función para permitir un archivo adjunto. Por otra parte, si es solo un archivo de registro, puede valer la pena usar shell()
como mencionaste.
¿Te contentarías con un mensaje de Twitter? Puede usar Rcurl para publicar una actualización en Twitter, que luego se puede reenviar a su teléfono celular como un texto, o a su correo electrónico a través de la configuración de notificaciones.
Vea aquí: http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/
Para Windows uno podría analizar juntos un VB-Script (ver, por ejemplo, http://www.paulsadowski.com/wsh/cdo.htm ) y luego llamarlo a través de shell.
Esto podría verse así:
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")
}
Solo quiero recordarle a la gente que quiere la función de auto-notificación de un servicio llamado twilio, ellos brindan servicio gratuito para enviar sms a su propio teléfono celular. Se puede acceder a través de R aquí https://dreamtolearn.com/ryan/data_analytics_viz/78
Se adjunta un código de ejemplo, simplemente reemplace las credenciales por las suyas propias.
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"))
Utilice mailR : funciona con autenticación, archivos adjuntos, envía automáticamente mensajes de texto junto con html y más.
mailR
requiere rJava, lo que a veces puede ser un poco molesto. En Windows no he tenido ningún problema. En ubuntu esto resolvió el único problema que tuve:
sudo apt-get install openjdk-jdk
en R
install.packages("devtools", dep = T)
library(devtools)
install_github("rpremraj/mailR")
(Si tiene problemas con rJava, intente con sudo R CMD javareconf
en el terminal)
mailR
es fácil de trabajar y está bien documentado en la página de github.
Ejemplo de la documentacion
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)
Nota: su servidor smtp puede considerar que el uso excesivo es sospechoso. Este es el caso con, por ejemplo, gmail. Entonces, después de enviar algunos correos, es probable que deba iniciar sesión en la cuenta de Gmail y ver si la cuenta se ha desactivado temporalmente. También tenga en cuenta que si utiliza una cuenta de Gmail con autenticación de dos factores, debe utilizar una contraseña específica de la aplicación .
sendmailR funciona para mí en Windows 7. Me referí a http://cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf
smtpServer = información para Outlook 2010 está en Archivo -> Configuración de cuenta -> Configuración de cuenta -> haga doble clic en su cuenta -> texto en el cuadro "Servidor"
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)
Además, se pueden enviar varios archivos agregando otro mime_part a la lista de mensajes de la siguiente manera (también lo condensé):
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)