我想用下面的代码在Windows上运行sendmailR:
## Not run:
from <- "<tal.galili@gmail.com>" # sprintf("<sendmailR@\\%s>", Sys.info()[4])
to <- "<tal.galili@gmail.com>"
subject <- "Hello from R"
body <- list("It works!", mime_part(iris))
sendmail(from, to, subject, body,
control=list(smtpServer="ASPMX.L.GOOGLE.COM."))
并得到以下错误:
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 tal.galili@gmail.com:statisfun:25 cannot be opened
这里的答案给出一个Linux解决方案,我将针对Windows用户的建议表示感谢。
谢谢。
你可以给新mailR包一个镜头: http://cran.r-project.org/web/packages/mailR/index.html
然后下面的调用应该工作:
send.mail(from = "tal.galili@gmail.com",
to = "tal.galili@gmail.com",
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)
我习惯使用这些线路经由R个发送电子邮件。
假设你的电子邮件是tal.galili@gmail.com
使用窗口操作系统(我的操作系统)
library(sendmailR)
# 1 case
from <- sprintf("<sendmailR@%s>", Sys.info()[4])
to <- "<tal.galili@gmail.com>"
subject <- "Hello from R"
msg <- "my first email"
sendmail(from, to, subject, msg,control=list(smtpServer="ASPMX.L.GOOGLE.COM"))
# 2 case
from <- sprintf("<tal.galili@gmail.com>", Sys.info()[4])
to <- "<tal.galili@gmail.com>"
subject <- "Hello from R"
msg <- "my first email"
sendmail(from, to, subject, msg,control=list(smtpServer="ASPMX.L.GOOGLE.COM"))
这sendmailR身份验证失败的任何时候,人们得到的不是那么有用消息
Error in if (code == lcode) { : argument is of length zero
这可能是许多原因,包括服务器端的原因。 就我而言,我需要把我的IP对服务器的白名单。 @ alko989声明在使用sendemailR问题是authentication ... is not supported by sendmailR
,并作为sendmailR的2015年- 2月20出版的https://cran.r-project.org/web/packages/sendmailR/sendmailR。 PDF格式 ,唯一的控制参数smtpServer
, smtpPort
和verbose
,所以没有什么用户,密码,SSL,TLS等今天的邮件服务器往往要比以往的邮件服务器更安全,所以这是sendmailR严重限制。
作为替代使用sendmailR你可以试试这个:
解析在一起的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")
}
...并使用它像这样:
SendMail(
from="me.myself@andI.com",
to="whatsup@man.com",
text="Hallo",
subject="readThis",
smtp="smtp.andI.com",
user="me.myself@andI.com",
pw="123456"
)