【问题标题】:Sending R Markdown output as body email via outlook (RDCOMclient)通过 Outlook(RDCOMclient)将 R Markdown 输出作为正文电子邮件发送
【发布时间】:2020-06-23 08:08:54
【问题描述】:

刚刚学习 R Markdown 语言,想知道我是否可以通过 Outlook 从 R 发送正文电子邮件的输出(使用 RDCOMClient;我的办公室不使用 gmail)

谢谢

【问题讨论】:

标签: r vba outlook r-markdown rdcomclient


【解决方案1】:

根据 Ben 的回答,到处出现的奇怪符号可能是由 R 和 Outlook 对象(由 RDCOMClient 库创建)之间的编码不匹配引起的。

Outlook 的基本编码是“UTF-16”,而基本的 RMarkdown 输入是“UTF-8”。要确保 RMarkdown 生成的 html 输出是“UTF-8”,请写:

knitr::knit("tale_email_body.Rmd", encoding = "UTF-8")  
eb <- read_lines("tale_email_body.html",locale =  locale(encoding = "UTF-8"))     
Encoding(eb)

您应该看到一个向量,其条目为"UTF-8""unknown"。接下来,您必须使用以下方法将编码转换为正确的格式:

eb2 <- paste(eb, sep="", collapse="") 
eb2 <- iconv(eb2, from = "UTF-8",to= "Latin1")

您应该能够使用 Ben 的代码发送没有奇怪符号的电子邮件:

library(RDCOMClient)

olMailItem <- 0
OutApp <- COMCreate("Outlook.Application")
outMail = OutApp$CreateItem(olMailItem)

# this retains default Outlook signature
outMail$GetInspector()
signature <- outMail[["HTMLBody"]]

outMail[["To"]] <- sm
outMail[["CC"]] <- paste("egrp",dm,sep=";")
outMail[["subject"]] <- "note this"
outMail[["BodyFormat"]] <- 2
outMail[["HTMLbody"]] <- paste0(eb2, signature)
outMail$Display()
outMail$Send()

【讨论】:

    【解决方案2】:

    简答:

    为电子邮件正文创建 .Rhtml 文件。

    编织并阅读:

    knitr::knit("tale_email_body.Rhtml")  
    library("readr", lib.loc="~/R/win-library/3.2")
    eb <- read_lines("tale_email_body.html",n_max= -1L)
    eb2<-paste(eb, sep="", collapse="") 
    

    在电子邮件正文中使用结果:

    library(RDCOMClient)
    
    olMailItem <- 0
    OutApp <- COMCreate("Outlook.Application")
    outMail = OutApp$CreateItem(olMailItem)
    
    # this retains default Outlook signature
    outMail$GetInspector()
    signature <- outMail[["HTMLBody"]]
    
    outMail[["To"]] <- sm
    outMail[["CC"]] <- paste("egrp",dm,sep=";")
    outMail[["subject"]] <- "note this"
    outMail[["BodyFormat"]] <- 2
    outMail[["HTMLbody"]] <- paste0(eb2, signature)
    outMail$Display()
    outMail$Send()
    

    如果您有任何问题或改进,请告诉我。

    部分归功于:How to add my Outlook email signature to the COM object using RDCOMClient

    【讨论】:

    • 这种方法对我有用,但没有在我的 html 文件中保留很多格式,并且还导致到处出现奇怪的符号(例如,代替撇号)。
    猜你喜欢
    • 2015-08-10
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2012-03-03
    相关资源
    最近更新 更多