如何使用RDComClient在Outlook邮件中插入OFT模板?
在Outlook中嵌入预制OFT模板或复杂HTML的解决方案
原代码的核心问题
你之前错误地把OFT模板当作图片附件添加,还用<img>标签尝试引用——OFT是Outlook专属的邮件模板文件,根本不是图片格式,这么做肯定无法正常显示。另外嵌入图片时没设置对应的CID属性,即使附件添加成功,HTML里的图片引用也可能失效。
下面给你两种可行的解决方案:
方案一:直接加载OFT模板创建邮件
这是使用OFT模板的正确方式,直接基于模板生成邮件,模板里的格式、内容都会被完整继承,还能按需修改收件人、添加附件。
# 启动Outlook客户端 Outlook <- COMCreate("Outlook.Application") # 直接从OFT模板创建邮件(替换为你的OFT文件路径) Email <- Outlook$CreateItemFromTemplate("html/html.oft") # 添加原有附件 Email[["attachments"]]$Add("PDFS/genericos/CG_GMMC.pdf") Email[["attachments"]]$Add("PDFS/genericos/Guia_de_Acompanamiento_2023.pdf") Email[["attachments"]]$Add(paste0("zips/poliza", base_cruzada_p_envio$numcertceros[c], ".zip")) # 嵌入图片并设置CID(确保HTML里的cid引用能匹配) img_path <- "html/AXA_Assistance_com.jpg" Email[["attachments"]]$Add(img_path) # 获取刚添加的图片附件(索引根据附件添加顺序调整,这里是第4个) img_attachment <- Email[["attachments"]]$Item(4) # 设置CID属性,和HTML里的src='cid:AXA_Assistance_com.jpg'对应 img_attachment$PropertyAccessor$SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", "AXA_Assistance_com.jpg") # 修改收件人和主题(如果模板已有主题,可选择覆盖或保留) Email[["to"]] <- base_cruzada_p_envio$Correo[c] Email[["subject"]] <- "¡Tu póliza de GMM ha sido renovada!" # 显示邮件检查内容 Email$Display() # 发送邮件 Email$Send() # 等待Outlook完成发送(时间可按需调整) Sys.sleep(14.0) # 清理对象 rm(Outlook, Email)
方案二:读取外部HTML文件作为邮件正文
如果你的"html.oft"其实是普通HTML文件(只是命名错误),可以直接读取HTML内容作为邮件的HTML正文,同时保留嵌入图片和添加附件的逻辑。
# 启动Outlook客户端 Outlook <- COMCreate("Outlook.Application") # 创建空白邮件 Email <- Outlook$CreateItem(0) # 添加原有附件 Email[["attachments"]]$Add("PDFS/genericos/CG_GMMC.pdf") Email[["attachments"]]$Add("PDFS/genericos/Guia_de_Acompanamiento_2023.pdf") Email[["attachments"]]$Add(paste0("zips/poliza", base_cruzada_p_envio$numcertceros[c], ".zip")) # 嵌入图片并设置CID img_path <- "html/AXA_Assistance_com.jpg" Email[["attachments"]]$Add(img_path) img_attachment <- Email[["attachments"]]$Item(3) # 图片是第3个附件,索引按需调整 img_attachment$PropertyAccessor$SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", "AXA_Assistance_com.jpg") # 读取外部HTML文件内容(替换为你的HTML文件路径) html_content <- readLines("html/你的实际HTML文件.html", warn = FALSE) html_content <- paste(html_content, collapse = "\n") # 如果HTML里有图片占位符,替换为对应的CID(比如把{{IMG_CID}}换成cid:AXA_Assistance_com.jpg) # html_content <- gsub("{{IMG_CID}}", "cid:AXA_Assistance_com.jpg", html_content) # 设置邮件正文为HTML内容 Email[["HTMLbody"]] <- html_content # 设置收件人和主题 Email[["to"]] <- base_cruzada_p_envio$Correo[c] Email[["subject"]] <- "¡Tu póliza de GMM ha sido renovada!" # 显示邮件检查 Email$Display() # 发送邮件 Email$Send() # 等待发送完成 Sys.sleep(14.0) # 清理对象 rm(Outlook, Email)
内容的提问来源于stack exchange,提问作者Cesar Amezcua
相关产品推荐
相关产品推荐

