You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中生成带附件的Outlook草稿.msg文件?

生成带附件的.msg邮件草稿(适配IT限制的R参数化方案)

方案一:R参数化配置 + VBS脚本调用Outlook生成草稿

这个方案无需额外安装R包(仅用base R),通过VBS调用Outlook的COM接口创建草稿,R负责批量/参数化配置邮件内容和附件。

代码实现

# 1. 定义单封邮件的参数(可批量扩展为列表循环)
mail_params <- list(
  to = "recipient@example.com",
  subject = "季度绩效报告通知",
  body = "您好,\n这是您的季度绩效报告相关文件,请查收附件。\n\n如有疑问请随时联系。\n祝好,\n您的同事",
  attachments = c("./reports/performance.pdf", "./data/metrics.xlsx", "./docs/summary.docx")
)

# 2. 格式化正文换行符(适配VBS语法)
formatted_body <- gsub("\n", "\\\\n", mail_params$body)

# 3. 生成附件添加语句
attach_lines <- paste0(".Attachments.Add \"", mail_params$attachments, "\"", collapse = "\n  ")

# 4. 拼接VBS脚本内容
vbs_content <- paste(
  'Set objOutlook = CreateObject("Outlook.Application")',
  'Set objMail = objOutlook.CreateItem(0)',
  '',
  'With objMail',
  paste('  .To = "', mail_params$to, '"', sep = ""),
  paste('  .Subject = "', mail_params$subject, '"', sep = ""),
  paste('  .Body = "', formatted_body, '"', sep = ""),
  attach_lines,
  '  .Save  ' # 直接保存为Outlook草稿
  'End With',
  '',
  'Set objMail = Nothing',
  'Set objOutlook = Nothing',
  sep = "\n"
)

# 5. 保存并运行VBS脚本
writeLines(vbs_content, "generate_draft.vbs")
shell("generate_draft.vbs") # Windows系统下直接执行

说明

  • 运行后会自动在Outlook的「草稿」文件夹生成对应邮件,直接打开即可手动发送
  • 批量生成时,只需将mail_params改为包含多组参数的列表,循环执行上述代码即可

方案二:生成EML文件后转存为.msg草稿

如果无法调用Outlook COM接口,可以生成标准EML格式文件,双击打开后在Outlook中保存为草稿。

代码实现(需base64enc包,若受限可替换为openssl包)

install.packages("base64enc") # 若已安装可跳过
library(base64enc)

# 1. 参数配置
mail_params <- list(
  from = "Your Name <your@company.com>",
  to = "recipient@example.com",
  subject = "季度绩效报告通知",
  body = "您好,\n这是您的季度绩效报告相关文件,请查收附件。\n\n祝好,\n您的同事",
  attachments = c("./reports/performance.pdf", "./data/metrics.xlsx", "./docs/summary.docx")
)

# 2. 构建EML头部
eml_header <- paste(
  paste("From:", mail_params$from),
  paste("To:", mail_params$to),
  paste("Subject:", mail_params$subject),
  "MIME-Version: 1.0",
  'Content-Type: multipart/mixed; boundary="email_boundary_001"',
  "",
  "--email_boundary_001",
  'Content-Type: text/plain; charset="UTF-8"',
  "",
  mail_params$body,
  "",
  sep = "\n"
)

# 3. 处理附件(转Base64编码)
attach_sections <- lapply(mail_params$attachments, function(file_path) {
  file_raw <- readBin(file_path, "raw", file.info(file_path)$size)
  file_b64 <- base64encode(file_raw)
  # 分割为每行76字符符合MIME规范
  b64_lines <- paste(strsplit(file_b64, "(?<=.{76})", perl = TRUE)[[1]], collapse = "\n")
  filename <- basename(file_path)
  
  paste(
    "--email_boundary_001",
    paste('Content-Disposition: attachment; filename="', filename, '"', sep = ""),
    "Content-Transfer-Encoding: base64",
    "",
    b64_lines,
    "",
    sep = "\n"
  )
})

# 4. 合并所有部分并保存EML
eml_full <- paste(eml_header, paste(unlist(attach_sections), collapse = "\n"), "--email_boundary_001--", sep = "\n")
writeLines(eml_full, "mail_draft.eml")

说明

  • 生成的EML文件双击即可在Outlook中打开,点击「保存」自动存入草稿文件夹
  • 若无法安装base64enc包,可手动使用Base64编码工具处理附件后替换代码中的对应部分

内容的提问来源于stack exchange,提问作者blayne_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:37:41