r - RDCOMClient (Outlook) - ggplot
问题描述
我正在使用该RDCOMClient
库来创建 Outlook 电子邮件。我想将 aggplot
作为电子邮件正文(内联)中的图像发送,而不是作为附件发送。
我认为这一点的唯一方法是将绘图添加为HTMLBody
属性内的图像。我尝试了 2 种不同的方法在 html 中添加图像。
1 -使用该RMarkdown
库,我创建了一个带有绘图的 html 页面。这不起作用,因为图像被编码为base64
Outlook 不支持的字符串。
2 -将 ggplot 保存到文件并手动创建一个简单的 html,例如:<html><body><img src="**path**/my_plot.png" /></body></html>
. 这也显示错误而不是图像。
有没有办法添加图片内联?
编辑:
第二种方法适用于本地电子邮件,但接收者的消息有错误而不是实际图像。
解决方案
您可以使用内容 ID(“cid”)附加图像并在电子邮件正文中引用它:
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
ggsave(tf<-tempfile(fileext = ".png"), p, dpi = 100, width = 5, height = 5)
library(RDCOMClient)
OutApp <- COMCreate("Outlook.Application")
outMail = OutApp$CreateItem(0)
attach <- outMail[["Attachments"]]$Add(tf)
invisible(attach$PropertyAccessor()$SetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x370E001E",
"image/png"
))
invisible(attach$PropertyAccessor()$SetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x3712001E",
cid <- "myggplotimg"
))
outMail[["To"]] = "johndoe@example.com"
outMail[["Subject"]] = "ggplot image"
outMail[["HTMLbody"]] <- sprintf('<p>Here is your image:<br><img src="cid:%s"></p>', cid)
invisible(outMail$Save())
rm(outMail, attach, OutApp)
推荐阅读
- react-native - 父子onpress功能
- excel - 自动填充范围内的 2 个变量
- sql - 我怎样才能在第一列中具有相同的值,但前提是第二列不同
- regex - Apache - 将以....开头的“URL文件夹”重定向到特定的真实目录
- angular - 如何在 Angular 9 中测试 toPromise
- python-3.x - Microsoft Bot Teams 错误“未为 Teams 频道上的 bot 启用 SSO。”
- c - RSA 加密。EVP_PKEY_CTX_new 失败
- python - 复制文件时出现 FileNotFoundError
- python-3.x - 散点图中的颜色点按位置(matplotlib)
- windows - 批处理文件中的通配符未按预期工作