Utilice sendmailR con Windows
email smtp (4)
Cada vez que sendmailR no se autentica, uno recibe el mensaje no tan útil que
Error in if (code == lcode) { : argument is of length zero
Esto puede ser por muchas razones, incluyendo razones del lado del servidor. En mi caso, necesitaba poner mi IP en la lista blanca del servidor. @ alko989 declara en el asunto usando sendemailR que la authentication ... is not supported by sendmailR
, y a partir de la publicación 2015-Feb-20 de sendmailR https://cran.r-project.org/web/packages/sendmailR/sendmailR.pdf , los únicos parámetros de control son smtpServer
, smtpPort
y verbose
, así que nada para el usuario, contraseña, ssl, tls, etc. Los servidores de correo de hoy en día tienden a ser mucho más seguros que los servidores de correo del pasado, por lo que es una seria limitación de sendmailR .
Estoy intentando ejecutar sendmailR en Windows con el siguiente código:
## Not run:
from <- "<[email protected]>" # sprintf("<sendmailR@//%s>", Sys.info()[4])
to <- "<[email protected]>"
subject <- "Hello from R"
body <- list("It works!", mime_part(iris))
sendmail(from, to, subject, body,
control=list(smtpServer="ASPMX.L.GOOGLE.COM."))
Y recibe el siguiente error:
Error in socketConnection(host = server, port = port, blocking = TRUE) :
cannot open the connection
In addition: Warning message:
In socketConnection(host = server, port = port, blocking = TRUE) :
smtp.gmail.com [email protected]:statisfun:25 cannot be opened
La respuesta aquí ofrece una solución para Linux, y agradecería los consejos para los usuarios de Windows.
Gracias.
Como alternativa al uso de sendmailR, puede intentar esto:
Analice juntos un VB-Script (consulte, por ejemplo, http://www.paulsadowski.com/wsh/cdo.htm ) y luego llámelo 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")
}
... y utilízalo así:
SendMail(
from="[email protected]",
to="[email protected]",
text="Hallo",
subject="readThis",
smtp="smtp.andI.com",
user="[email protected]",
pw="123456"
)
Podría darle una oportunidad al nuevo paquete mailR: http://cran.r-project.org/web/packages/mailR/index.html
La siguiente llamada debería funcionar:
send.mail(from = "[email protected]",
to = "[email protected]",
subject = "Subject of the email",
body = "Body of the email",
smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "tal.galili", passwd = "PASSWORD", ssl = TRUE),
authenticate = TRUE,
send = TRUE)
Solía enviar correos electrónicos a través de R usando estas líneas.
Supongamos que su correo electrónico es [email protected]
utilizando Windows OS (mi sistema operativo)
library(sendmailR)
# 1 case
from <- sprintf("<sendmailR@%s>", Sys.info()[4])
to <- "<[email protected]>"
subject <- "Hello from R"
msg <- "my first email"
sendmail(from, to, subject, msg,control=list(smtpServer="ASPMX.L.GOOGLE.COM"))
# 2 case
from <- sprintf("<[email protected]>", Sys.info()[4])
to <- "<[email protected]>"
subject <- "Hello from R"
msg <- "my first email"
sendmail(from, to, subject, msg,control=list(smtpServer="ASPMX.L.GOOGLE.COM"))