【问题标题】:how do you send email from R你如何从 R 发送电子邮件
【发布时间】:2020-10-01 08:19:02
【问题描述】:

我想从 R 发送电子邮件。这是我目前所拥有的:

library(sendmailR)


from <- "eamil@example.com"
to <- "email2@example.com"
subject <- "Performance Result"
body <- "This is the result of the test:"                     
mailControl=list(smtpServer="snmpt server address")

sendmail(from=from,to=to,subject=subject,msg=body,control=mailControl)

当我执行这个脚本时,我的 R 会话挂起。任何想法可能会发生什么?

【问题讨论】:

  • 知道如何解决这个问题真是太棒了我尝试使用此功能时总是出错@user1471980
  • 你的操作系统是什么?
  • mailR 是否使用相同的配置工作?
  • 您需要在to中设置一个有效的smtpServer和有效的电子邮件地址。更不用说这是重复的stackoverflow.com/questions/2885660/…
  • @Duck 确保它可以在 Windows 或任何其他操作系统上运行,您只需要某个地方的 SMTP,可能不在运行 R 的机器上。您可以使用您的 ISP 的邮件服务器。

标签: r


【解决方案1】:

如果您需要能够使用带有身份验证的 smtp 服务器,您可以使用 mailR 包。

例如使用gmail的smtp服务器:

library(mailR)
sender <- "SENDER@gmail.com"
recipients <- c("RECIPIENT@gmail.com")
send.mail(from = sender,
          to = recipients,
          subject = "Subject of the email",
          body = "Body of the email",
          smtp = list(host.name = "smtp.gmail.com", port = 465, 
                      user.name = "YOURUSERNAME@gmail.com",            
                      passwd = "YOURPASSWORD", ssl = TRUE),
          authenticate = TRUE,
          send = TRUE)

【讨论】:

  • 我收到这样的错误:Error in ls(envir = envir, all.names = private) : invalid 'envir' argument
  • 我无法复制您的错误。该代码对我有用。考虑提出一个新问题,在其中描述如何重现此错误,并且可能有人能够帮助您。也许this 有帮助。
  • @MarcinKosinski 我也遇到了这个错误,但后来重新启动了 R,它对我有用。
  • @BigDataScientist 如果您在 gmail 设置中 allow less secure apps access,代码仍然有效。问题是您是否愿意接受与之相关的任何风险。
  • @BigDataScientist 有许多 SMTP 提供商(其中大多数提供每月几百封电子邮件的免费套餐)。如果您使用 EC2,Amazon 会为前 62000 封电子邮件提供免费的 SMTP 服务器,称为Amazon SES
【解决方案2】:

我刚刚试了一下,它对我有用。

我唯一的区别是我使用 表示 from 和 to:

from = "<email1@dal.ca>"
to = "<email2@gmail.com>"

而且我的邮件控件不一样,我用的是

control=list(smtpServer="ASPMX.L.GOOGLE.COM"))

【讨论】:

  • 我使用的是 Windows (8.1),但我没有使用 Outlook,所以我不确定。
  • 谢谢@Sarah 也许你知道如何在 Windows 上获得smtpServer
  • @Duck R 能够在 Outlook 上发送邮件意味着什么?
  • @isomorphismes 考虑 microsoft office outlook
  • @Duck 可以通过R发送邮件xorOutlook;这些选项是互斥的。
【解决方案3】:

很抱歉打错了这个帖子。如果您想使用 Microsoft Outlook 从 R 发送电子邮件,以下是使用 RDCOMClient 包的方法。我自己花了很多时间试图找到答案。我认为在此线程中为用户提供此解决方案也会很有用。

感谢在此链接中提供原始解决方案的 @agstudy - Sending email in R via outlook

library (RDCOMClient)

OutApp <- COMCreate("Outlook.Application")
outMail = OutApp$CreateItem(0)
outMail[["To"]] = "test@test.com"
outMail[["subject"]] = "Test Subject"
outMail[["body"]] = "Body of email"               
outMail$Send()

【讨论】:

  • 有没有办法通过 RShiny 应用程序从 ubuntu 上的 RShinyServer 发送 Outlook 电子邮件?
【解决方案4】:
library(mailR)
sender <- "abc@gmail.com"

recipients <- c("bcd@gmail.com","xyz@gmail.com")

send.mail(
    from = sender, 
     to = recipients, 
     subject="Cash_Collected_Bank_transfer",
     Sys.Date(),
     "{}", body = Summary1, encoding = "utf-8", smtp = 
         list(host.name = "smtp.gmail.com", port = 465, 
         user.name="abc@gmail.com", passwd="abc@1234", ssl=TRUE), 
     authenticate = TRUE, send = TRUE ,
     attach.files = c(path2), html = TRUE , inline = TRUE )

【讨论】:

  • 虽然您的答案可能是正确的,但最好添加说明性文字以帮助读者理解您的代码。
  • 有没有办法加密密码?
  • @DJ_Stuffy_K:4 年后才看到,但我的方法是在 R 中为密码设置环境变量(对于任何偶然发现此问题的人)首先将密码写在环境变量 @ 987654323@ 然后在你的脚本中调用你的环境变量passwd = Sys.getenv("GMAIL_PWD") 这样你就不需要在脚本上硬编码你的密码了。你可以对其他变量做同样的事情
  • 注意,您可能需要在“发件人”字段中使用&lt;&gt;从另一个邮箱地址发送(参见其他答案stackoverflow.com/a/23413965/1255931)。
【解决方案5】:

有一个名为emayili 的新包有两个非常有趣的承诺:

  • 适用于各种 SMTP 服务器
  • 具有最少的依赖关系(或容易满足的依赖关系)

这似乎处于早期阶段,但仍然很有希望。发送电子邮件很简单:

devtools::install_github("datawookie/emayili")
library(emayili)
library(dplyr)

email <- envelope() %>%
  from("alice@yahoo.com") %>%
  to("bob@google.com") %>%
  subject("This is a plain text message!") %>%
  body("Hello!")

smtp <- server(host = "smtp.gmail.com",
               port = 465,
               username = "bob@gmail.com",
               password = "bd40ef6d4a9413de9c1318a65cbae5d7")

smtp(email, verbose = TRUE)

【讨论】:

  • 如果我从 Yahoo 帐户发送消息,我可以使用相同的 SMTP 服务器吗?另外,这是发件人还是收件人的电子邮件/密码?
【解决方案6】:

通过 Gmail 发送电子邮件有两种方式,匿名或经过身份验证。这是匿名的代码:

library(mailR)
send.mail(from = "sender@gmail.com",
      to = c("Recipient 1 <recipient1@gmail.com>", "recipient2@gmail.com"),
      cc = c("CC Recipient <cc.recipient@gmail.com>"),
      bcc = c("BCC Recipient <bcc.recipient@gmail.com>"),
      subject = "Subject of the email",
      body = "Body of the email",
      smtp = list(host.name = "aspmx.l.google.com", port = 25),
      authenticate = FALSE,
      send = TRUE)

确保收件人电子邮件也是 Gmail。它很可能会进入 Gmail 帐户中的垃圾邮件文件夹,因此请务必将其标记为“非垃圾邮件”。

您可以找到更多信息here

【讨论】:

    【解决方案7】:

    如果您更喜欢自己的服务器解决方案,您可以致电 linux sendmail。

    EMAIL <- myEmail@gmail.com
    cmd <- 'subject="Info server";body="This is an email"'
    cmd <- paste("echo -e \"Subject:${subject}\n${body}\" | /usr/sbin/sendmail -t \"", EMAIL, "\"")
    system(cmd)      
    

    【讨论】:

      【解决方案8】:

      我发现在 Ubuntu 中最简单的方法是在 R 中运行单行终端命令。 无需密码。

      try(system("mutt -s '运行完成。' yourremail@anymail.com /null", intern = TRUE))

      在此之前,您需要在终端中安装 mutt。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 2011-11-14
        • 2016-12-12
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多