【问题标题】:How to send HTML email using R如何使用 R 发送 HTML 电子邮件
【发布时间】:2013-11-07 19:21:25
【问题描述】:

我搜索了 SO 和 google,但似乎无法找到解决问题的方法。我正在尝试使用 sendmailR 包在 R 中发送 HTML 格式的电子邮件。纯文本电子邮件工作正常,但无法从纯文本切换到 HTML。

我的代码:

require(sendmailR)
from <- "alertbot@companyname.com"
message = "<HTML><body><b>Hello</b></body></HTML>"
to = c("me@companyname.com")
subject = "Test Monitor Alert"

sendmail(from, to, subject, msg = msg,control=list(smtpServer="smtp-gw1.wal-mart.com"),headers=list("Content-Type"="text/html; charset=UTF-8; format=flowed"))

我确实收到了电子邮件,但它是纯文本的,并且电子邮件正文包含原样的消息,而不是 HTML 格式的文本。请帮忙。

【问题讨论】:

    标签: html r email


    【解决方案1】:

    这是可能的,参见https://stackoverflow.com/a/21930556/448145 只需添加:

    msg <- mime_part(message)
    msg[["headers"]][["Content-Type"]] <- "text/html"
    sendmail(from, to, subject, msg = msg, ...)
    

    【讨论】:

      【解决方案2】:

      sendmailR 无法做到这一点,因为它被硬编码为将消息部分作为文本发送出去。如果你查看包源,sendmail.R 的第 38 行如下:

      writeLines("Content-Type: text/plain; format=flowed\r\n", sock, sep="\r\n")
      

      改成

      writeLines("Content-Type: text/html; format=flowed\r\n", sock, sep="\r\n")
      

      就像你尝试通过选项做的那样,它会起作用。

      更新sendmailR 现在允许 html 电子邮件(请参阅下面 Karl 的回答和 https://stackoverflow.com/a/21930556/448145)。

      【讨论】:

      • 哇,我不知道它是硬编码的。你知道另一个可能允许这样做的包吗?我对更改包本身的来源感到不舒服。
      • 我对此投了赞成票,但自从你写了 sendmail.R 之后,它似乎发生了变化
      【解决方案3】:

      使用 mailR 包 (https://github.com/rpremraj/mailR),您可以轻松发送 HTML 电子邮件,如下所示:

      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)
      

      【讨论】:

        【解决方案4】:

        比起使用 R 包,我更喜欢为此类任务使用专门的邮件代理。例如,您可以使用Mutt。适用于 linux 和 windows。

        这里我使用选项 -e 发送命令:

        writeLines(message,
                   p<-pipe(paste('mutt -e ','"set content_type=text/html"',
                                  from,to,' -s ', subject))
        close(p)
        

        【讨论】:

          【解决方案5】:

          如果不出意外,您可以将 html 发布到 php 页面,并让 php 发送 html 电子邮件。我们会看看其他人是否有更好的解决方案。

          【讨论】:

          • 这更像是一个评论而不是一个答案。
          • 是的,非常接近。但如果源不可编辑,它实际上是 (a) 解决方案。
          • 我不熟悉php,我使用的是windows VM。我会记住这一点,但会先尝试其他选项。谢谢。
          猜你喜欢
          • 2011-01-01
          • 1970-01-01
          • 2012-10-29
          • 2011-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多