【问题标题】:R: sending email with sendmailR - "invalid host argument" errorR:使用 sendmailR 发送电子邮件 - “无效的主机参数”错误
【发布时间】:2014-04-27 00:06:17
【问题描述】:

我已经下载了 sendmailR 包,但是我无法发送电子邮件。我看到还有其他几篇关于此的帖子,但我无法纠正问题。

我的代码如下:

smtp = list(host.name = "smtp.gmail.com", 端口 = 465, user.name = "xxx@gmail.com", passwd = "yyy", ssl = TRUE)

mailControl=list(smtpServer=smtp)

发送邮件(发件人 = 发件人,收件人 = 收件人,主题 = 标题,消息 = bodyWithAttachment, control = mailControl)

我不断收到错误:

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

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

任何帮助都会很棒!

谢谢

迈克

【问题讨论】:

    标签: r email


    【解决方案1】:

    我在使用 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”) # 带引号

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

    source('../postmarkapp.r') #或者你的 postmarkapp.r 的路径

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

    mailtext

    send_email(to = '...', from = '...', subject = '...', body = mailtext, attachments = 'path-to-file') #或跳过附件

    这应该可行。但是,如果代码在获取 postmarkapp 时失败,则可能是由于依赖库所致。该应用程序取决于: 库(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 时走在了正确的轨道上。也许你已经有了。我使用:

    to = c("addressone", "addresstwo") to = paste(to, collapse=', ')

    【讨论】:

      【解决方案2】:

      据我所知,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)
      

      【讨论】:

        【解决方案3】:

        试试这个就行了

        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)
        

        【讨论】:

          【解决方案4】:
          sendmail(from, to, subject, body,
                     smtp=list(host.name="ASPMX.L.GOOGLE.COM"))
          

          这确实对我有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多