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

在R中发送带HTML正文的邮件遭Gmail截断问题排查

问题分析与解决方案

核心原因

  1. 错误的内容格式转换:你用md(glue::glue("{htmlDoc}"))将HTML内容转为markdown格式传入邮件正文,这会让blastula错误解析HTML代码,既破坏原有格式,又引入额外转义内容增大邮件体积。
  2. 冗余的HTML结构:默认html_document输出会生成包含完整HTML页面的代码(含Bootstrap框架的CSS、JS、页面头部结构等),即便空白内容,这些冗余代码也会让文件体积轻易超过邮件服务商的大小阈值,触发邮件截断。
  3. 文件名不一致:脚本中渲染的文件是"Daily Email .Rmd"(Email后多了一个空格),但实际文件名是"Daily Email.Rmd",可能导致渲染失败或读取错误文件。

解决步骤

1. 修改RMarkdown输出格式为精简片段

将Daily Email.Rmd的输出改为html_fragment,它仅生成正文内容,不包含完整页面的冗余结构:

---
title: "Daily Email 2"
output: html_fragment
date: "2023-12-07"
---

2. 修正邮件构建逻辑

直接将HTML内容传入compose_email的body参数,无需通过md()转换:

library(tidyverse)
library(blastula)

# 渲染精简的HTML片段,确保文件名和实际一致(去掉多余空格)
rmarkdown::render("Daily Email.Rmd",
                  output_file = "Daily Email.html")

htmlDoc <- read_file("Daily Email.html")
# 直接传入HTML正文,无需markdown转换
email <- compose_email(body = htmlDoc)

email %>%
  smtp_send(
    to = "myemail@gmail.com",
    from = "myemail@gmail.com",
    subject = "Daily Email",
    credentials = creds_envvar(
      user = "myemail@gmail.com",
      pass_envvar = "SMTP_PASSWORD",
      provider = "gmail"
    )
  )

3. 额外优化(可选)

若需自定义样式且进一步减小体积,可在RMarkdown中添加精简内联CSS,避免引入外部样式:

---
title: "Daily Email 2"
output: 
  html_fragment:
    css: "style.css"
date: "2023-12-07"
---

其中style.css仅保留邮件必需的样式,比如:

body { font-family: Arial, sans-serif; }
h1 { font-size: 18px; color: #333; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:25:01