mailR:如何在电子邮件中发送rmarkdown文档? [英] mailR: how to send rmarkdown documents as body in email?

查看:4660
本文介绍了mailR:如何在电子邮件中发送rmarkdown文档?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何发送 rmarkdown 生成的文档作为电子邮件中的一个正文,使用R?



我已经成功尝试 knitr mailR ,但是当与(新)生成html报告时, rmarkdown -package it failed。

  library(mailR)
send.mail b $ b from =FROM@gmail.com,
to =TO@gmail.com,
subject =MyMail,
html = T,
inline = T,
body =my_report.html,
smtp = list(host.name =smtp.gmail.com,port = 465,
user.name =USERNAME ,pass =PASSWORD,ssl = T),
authenticate = T,
send = T

错误:

  org.apache.commons.mail.EmailException:构建MimeMessage失败
在org.apache.commons.mail.ImageHtmlEmail.buildMimeMessage(ImageHtmlEmail.java:110)
在org.apache.commons.mail.Email.send(Email.java:1436)
在sun.reflect.NativeMethodAc cessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
在RJavaTools.invokeMethod(RJavaTools.java:386)
导致:java.io.IOException:无法解析以下文件资源:/ Users / USERNAME / myfolder /./ data:image / png; base64,iVBORw0KGg ...

(...)

... org.apache中的SuQmCC
commons.mail.resolver.DataSourceFileResolver.resolve(DataSourceFileResolver.java:105)
在org.apache.commons.mail.resolver.DataSourceFileResolver.resolve(DataSourceFileResolver.java:79)
在org.apache。 commons.mail.ImageHtmlEmail.replacePattern(ImageHtmlEmail.java:149)
在org.apache.commons.mail.ImageHtmlEmail.buildMimeMessage(ImageHtmlEmail.java:103)
... 6更多
错误:EmailException(Java):构建MimeMessa ge失败

我想这与以下行有关:无法解析以下文件资源:/ Users / USERNAME / myfolder /./ data:image / png; base64



我非常感谢任何形式的指导。

解决方案

mailR目前不支持解析使用数据URI方案编码的内联图像( http://en.wikipedia.org/wiki/Data_URI_scheme )。



暂时,我建议以下解决方案来解决您的问题。在未来,我将研究如何使邮件员本地支持。



首先,从R终端创建HTML文件(这里重要的是该选项不包括 base64_images ---请参阅?markdown :: markdownHTMLOptions ):

 库(knitr)
knit2html(my_report.Rmd,options =)
pre>

现在您可以通过mailR发送生成的HTML文件:

  send.mail(from =FROM@gmail.com,
to =TO@gmail.com,
subject =MyMail,
html = T,
inline = T,
body =my_report.html,
smtp = list(host.name =smtp.gmail.com,port = 465,user.name =USERNAME,passwd =PASSWORD,ssl = T),
authenticate = T,
send = T)


How to send rmarkdown generated documents as a body in an email, using R?

I have successfully tried knitr with mailR, but when instead generating the html-report with the (new) rmarkdown-package it fails.

library(mailR)
send.mail(
  from = "FROM@gmail.com",
  to = "TO@gmail.com",
  subject = "MyMail",
  html = T,
  inline = T,
  body = "my_report.html",
  smtp = list(host.name = "smtp.gmail.com", port = 465,
    user.name = "USERNAME", passed = "PASSWORD", ssl = T),
  authenticate = T,
  send = T
)

error:

org.apache.commons.mail.EmailException: Building the MimeMessage failed
    at org.apache.commons.mail.ImageHtmlEmail.buildMimeMessage(ImageHtmlEmail.java:110)
    at org.apache.commons.mail.Email.send(Email.java:1436)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at RJavaTools.invokeMethod(RJavaTools.java:386)
Caused by: java.io.IOException: Cant resolve the following file resource :/Users/USERNAME/myfolder/./data:image/png;base64,iVBORw0KGg …

(…)

… SuQmCC
    at org.apache.commons.mail.resolver.DataSourceFileResolver.resolve(DataSourceFileResolver.java:105)
    at org.apache.commons.mail.resolver.DataSourceFileResolver.resolve(DataSourceFileResolver.java:79)
    at org.apache.commons.mail.ImageHtmlEmail.replacePattern(ImageHtmlEmail.java:149)
    at org.apache.commons.mail.ImageHtmlEmail.buildMimeMessage(ImageHtmlEmail.java:103)
    ... 6 more
Error: EmailException (Java): Building the MimeMessage failed

I guess it has to do with the following line: Cant resolve the following file resource :/Users/USERNAME/myfolder/./data:image/png;base64?

I'm more than grateful for any kind of guidance.

解决方案

mailR currently does not support resolving inline images encoded using the data URI scheme (http://en.wikipedia.org/wiki/Data_URI_scheme).

For the time being, I suggest the following solution to address your problem. In the future, I will look into getting mailr to support this natively.

First off, create the HTML file from the R terminal (the important thing here is that options does not include "base64_images" --- see ?markdown::markdownHTMLOptions):

library(knitr)
knit2html("my_report.Rmd",options="")

Now you can send the resulting HTML file via mailR:

send.mail(from = "FROM@gmail.com",
          to = "TO@gmail.com",
          subject = "MyMail",
          html = T,
          inline = T,
          body = "my_report.html",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "USERNAME", passwd = "PASSWORD", ssl = T),
          authenticate = T,
          send = T)

这篇关于mailR:如何在电子邮件中发送rmarkdown文档?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆