R:使用sendmailR发送电子邮件 - “无效的主机参数”错误

时间:2014-03-20 09:01:53

标签: r email

我已下载sendmailR软件包,但发送电子邮件时遇到问题。我已经看到有其他几个帖子,但我无法纠正这个问题。

我的代码如下:

  

smtp = list(host.name =“smtp.gmail.com”,port = 465,user.name =   “xxx@gmail.com”                 passwd =“yyy”,ssl = TRUE)

     

mailControl =列表(SMTPSERVER = SMTP)

     

sendmail(from = sender,to = receiver,subject = title,msg =   bodyWithAttachment,control = mailControl)

我一直收到错误:

Error in socketConnection(host = server, port = port, blocking = TRUE) : 
  invalid 'host' argument

我不知道我是否正在使用正确的端口,或者如何检查(我已经尝试了几个我在网上找到的)。此外,主机名是我在一篇关于gmail帐户的帖子中找到的。不确定是否有某种方法可以检查我自己的计算机上的安全性是否以某种方式阻止它?

任何帮助都会很棒!

由于

麦克

4 个答案:

答案 0 :(得分:0)

我没有运气使用sendmail从gmail的smtp服务器发送。我不记得这个问题,但我尝试了很多解决方案。

但是,可以使用Postmarkapp API。它使用Hadley的postmarkapp.R(https://gist.github.com/hadley/5707759)。您可以在https://postmarkapp.com/注册免费的API密钥。

瑞典一位非常有帮助的人几个月前给我发了这样的解释: 在postmarkapp.com上注册并在https://gist.github.com/hadley/5707759

获取Hadley的脚本后,需要采取措施
  1. 从postmarkapp.com复制您的API密钥(在您的服务器名称下的凭据选项卡中) c80dc162-ad1c-44e8-B406-e9921fd8d2c3

  2. 在R中,写道:Sys.setenv(POSTMARKAPP_API_KEY = your-copied-api-key-here) Sys.setenv(POSTMARKAPP_API_KEY =“c80dc162-ad1c-44e8-b406-e9921fd8d2c3”)#with quotes

  3. 在要发送电子邮件的文件中,使用以下代码:

  4. source('../ postmarkapp.r')#或postmarkapp.r的路径,无论您将其存储在哪里

    source(“C:/ Users / Rees / Documents / R / R Scripts / sendgmailwithpostmarkfromHadleygist.R”)

    mailtext< - “早上好Rees,\ n这应该会立即向你发送电子邮件。\ n最好的问候,\ nKristbjorn”

    send_email(to ='...',from ='...',subject ='...',body = mailtext,attachments ='path-to-file')#or skip attachments

    这应该有效。但是,如果代码在采购postmarkapp时失败,则可能是由于依赖的Libaries。该应用程序取决于: 库(base64enc) 库(RJSONIO) 库(HTTR) 如果其中任何一个没有安装,你需要这样做。请注意,httr存储在github上,需要使用devtools包中的install_github进行安装:http://www.rstudio.com/projects/devtools/

    我用来发送给多个收件人的一个技巧,即在PostmarkApp上只花一个功劳,就是将文件发送到我自己的电子邮件地址,并在Outlook中将规则转发到多个地址。这也可以为您节省一些钱,但当然它会在必须监控的链条中引入新的潜在故障点。

    我刚刚获得了发送给多个收件人的解决方案。在http://developer.postmarkapp.com/developer-build.html

    上找到了它
    1. 您可以在“收件人”字段和可选的“抄送”和“密送”字段中传递多个收件人地址。用逗号分隔多个地址。请注意,邮戳总共每封邮件限制为20个收件人。您需要注意不要超过该限制。否则你会收到错误。 所以,你在尝试sprintf时走在正确的轨道上。也许你已经拥有它了。我用:
    2. to = c(“addressone”,“addresstwo”) to = paste(to,collapse =',')

答案 1 :(得分:0)

据我所知,sendmailR不支持SSL。因此,您无法通过smtp.gmail.com发送电子邮件。

但你可以试试应该工作的mailR包(https://github.com/rpremraj/mailR):

send.mail(from = "sender@gmail.com",
          to = c("recipient1@gmail.com", "recipient2@gmail.com"),
          subject = "Subject of the email",
          body = "<html>The apache logo - <img src=\"http://www.apache.org/images/asf_logo_wide.gif\"></html>",
          html = TRUE,
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "gmail_username", passwd = "password", ssl = TRUE),
          attach.files = c("./download.log", "upload.log"),
          authenticate = TRUE,
          send = TRUE)

答案 2 :(得分:0)

试试这个会起作用

send.mail(from = "user@gmail.com",
          to = "user2@gmail.com",
          subject = "Hello",
          body = "Hello R",        
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "user@gmail.com", passwd = "password", ssl = TRUE),              
          authenticate = TRUE,
          send = TRUE)

答案 3 :(得分:0)

sendmail(from, to, subject, body,
           smtp=list(host.name="ASPMX.L.GOOGLE.COM"))

这对我有用。