快速结论:该问题出现在使用 RAGFlow 的 Go Gmail connector 同步邮件时,请求字段过窄(只请求了 payload(headers,parts(body(data),mimeType))),导致根级正文和嵌套 MIME 正文既未被请求也未被写入同步文档。优先排查 Gmail payload 投影字段,而不是解码逻辑。
适用环境:RAGFlow 源码检出,Go 1.27.3,macOS arm64,CGO_ENABLED=0;Gmail connector 配置 batch_size=1,使用受控 HTTP transport(模拟 Google partial response),未接入真实邮箱,未使用凭据。上游基线为 main 94369fc289e61be2f7e43bd0c65862269207d9c4,验证分支为 fix/gmail-complete-mime-payload(4f0fcdd)。
最快修复方案:将 Gmail 请求的 payload 掩码从 payload(headers,parts(body(data),mimeType)) 改为完整的 payload(一行掩码变更),随后运行回归测试 TestGmailSyncRequestsCompleteMimePayload 验证。
注意事项:完整 payload 会请求更多字段,响应体积可能变大,但 Issue 未量化影响。现有验证基于受控 transport fixture,未在真实邮箱和完整服务端摄取流程中运行;另外验证针对的是当前 main,而非报告中固定的 94369fc,不过两者该掩码行一致。
问题场景
用户在 RAGFlow 中使用 Go 版 Gmail connector 执行邮件同步(OpenSync 与 NextBatch),配置 batch_size=1。当邮件是根级 text/plain,或 multipart/mixed → multipart/alternative → text/plain 这类嵌套 MIME 结构时,同步出的文档只保留邮件头(例如 subject: Body projection regression),正文丢失。Issue 使用合成邮箱和受控 HTTP transport 复现,未访问真实邮箱。
报错原文
[Bug]: Gmail connector drops root and nested MIME message bodies
mail body missing from synced document
原因分析
最可能的原因位于 HTTP 请求阶段:Gmail connector 请求 payload(headers,parts(body(data),mimeType)),该投影不包含根级 payload 的 body,也不包含任意深度的嵌套 parts。因此 Google API 根本不会返回这些正文数据,后续递归 MIME 读取器(gmailPayloadText 读取根级 text/plain,gmailPartText 递归读取嵌套 parts)无法恢复未被请求的字段。评论中的独立验证也确认解码逻辑本身可处理两种布局,问题在于请求投影而非解析器。Issue 还指出 PR #20226 修改的是 Python email chunker,与此 Go 端 HTTP 请求无关。
环境排查
- 确认 RAGFlow 版本/提交:报告基线为
94369fc289e61be2f7e43bd0c65862269207d9c4;独立验证针对当前 upstream main,internal/syncer/connector/gmail.go:213仍为窄投影。 - 确认 Go 版本为 1.27.3,平台 macOS arm64,
CGO_ENABLED=0。 - 确认 Gmail connector 配置,尤其是
batch_size=1。 - 检查
gmail.go中的 payload 掩码是否为payload(headers,parts(body(data),mimeType))。 - 确认测试邮件布局:根级
text/plain或嵌套multipart结构,正文含可识别文本(如invoice amount 125)。
解决步骤
- 在 Gmail connector 的 HTTP 请求中将 payload 掩码改为完整
payload,并补充说明注释。 - 应用回归测试
TestGmailSyncRequestsCompleteMimePayload(位于Zhi-Xiang-Guo:fix/gmail-complete-mime-payload分支),覆盖根级正文与嵌套正文两种布局。 - 以
CGO_ENABLED=0运行该回归测试及 connector 全套测试;Issue 记录修复后 684 个顶层测试和 193 个子测试通过。 - 若 PR #21811 已被关闭,可在维护者批准后重新打开或重新提交该修复;Issue 评论显示 #21811 已在验证过的提交上获批。
验证方法
用同样的邮件布局重新执行 OpenSync 与 NextBatch,检查同步出的 blob 是否同时包含主题行和正文文本;修复前回归用例报 mail body missing from synced document,修复后应通过,且 connector 测试套件全绿。注意 Issue 明确说明未完成真实 Google 邮箱集成和完整服务端摄取验证,线上邮箱场景仍建议自行抽查同步结果。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[BUG]: Changing Vector Database Setting to "Accuracy Optimized" causes Connection error on second prompt](https://www.chat-gpts.plus/wp-content/uploads/2026/11/4593-2ea3b7dd-768x403.jpg)
![[BUG] GPT-6 Astra agents with tools fail on Bedrock's OpenAI-compatible API because the retry sends reasoning_effort 'none'](https://www.chat-gpts.plus/wp-content/uploads/2026/11/7740-0bf21e54-768x403.jpg)
![[Bug]: docs: CLA link in CONTRIBUTING.md returns 'Bad credentials' error](https://www.chat-gpts.plus/wp-content/uploads/2026/11/49585-f6cc34f3-768x403.jpg)