2014-06-21 28 views
6

如何在電子郵件中使用R發送生成的文檔作爲正文?mailR:如何在電子郵件中將rmarkdown文檔作爲正文發送?

我已成功嘗試knitrmailR,但是如果生成帶有(新) -package的html報告,則會失敗。

library(mailR) 
send.mail(
    from = "[email protected]", 
    to = "[email protected]", 
    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 
) 

錯誤:

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 

我想這有以下行做:廣東話解決以下文件資源:/用戶/用戶名/ MyFolder中/./數據:圖像/ PNG; base64

我非常感謝任何一種指導。

+0

當html文件包含圖像時,即使使用(舊)降價包生成,也會得到類似的消息。 –

+0

如果圖像未包含在消息正文中,通常會出現以下失敗:「org.apache.commons.mail.EmailException:將電子郵件發送到以下服務器失敗:aspmx.l.google.com:25 。我們的系統檢測到此郵件可能是未經請求的郵件。爲減少發送到Gmail的垃圾郵件數量,此郵件已被阻止「 –

回答

9

mailR目前不支持解析使用數據URI方案(http://en.wikipedia.org/wiki/Data_URI_scheme)編碼的內聯圖像。

目前,我建議以下解決方案來解決您的問題。將來,我會考慮讓mailr在本地支持這一點。

首先,創建從R端的HTML文件(這裏最重要的是,選擇不包括「base64_images」 ---看到?markdown::markdownHTMLOptions):

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

現在您可以將生成的HTML文件通過郵件R:

send.mail(from = "[email protected]", 
      to = "[email protected]", 
      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) 
+2

謝謝!我期待着未來的本地支持。 – reinholdsson

+0

這適用於我在2015年年底。很好的回答 – Nelson

+0

@RahulPremraj我可以使用file.choose()或fileInput從閃亮來附加文件? – Apricot

相關問題