如何为GMail API手动创建合法的'Message'类型JSON对象
Gmail API 邮件发送构造相关问题解答
1. Message 对象最小必填字段集合
Gmail API messages.send 接口支持两种构造请求的方式,对应不同的必填字段:
直接构造嵌套JSON结构(非raw方案)
你要提交的Message对象最少需要包含以下字段:
payload.headers数组:必须包含3个头部对象:From(发件人邮箱)、To(收件人邮箱)、Subject(邮件主题)payload.mimeType:纯文本邮件填text/plain,HTML邮件填text/htmlpayload.body.data:邮件正文的URL安全Base64编码内容
如果需要发送附件,需要将payload.mimeType改为multipart/mixed,新增payload.parts数组分别存储正文、附件的分块内容,每个分块需要单独指定MIME类型、文件名(附件用)、编码后的内容,嵌套结构复杂度会大幅提升。
单raw字段方案
整个Message对象只需要包含raw一个字段,值为符合RFC 2822标准的邮件全文的URL安全Base64编码结果,是官方推荐的无依赖跨平台方案,不管有无附件都适用。
2. Message ID 规则说明
- Message对象顶层的
id字段是谷歌侧生成的全局唯一主键,无需也不能自定义,你提交请求时不需要携带该字段,发送成功后接口返回的结果中会自动带回该值,你自行填入的id会被谷歌直接忽略。 - 注意区分和邮件头部的
Message-ID(RFC标准邮件标识,不是Message对象的顶层字段):这个字段你可以选择自行生成(格式为<随机字符串@发件人域名>),也可以留空由谷歌自动生成,不属于必填项。
3. raw字段方案相关说明
RFC 2822 最小必填模板
无附件的纯文本邮件最小模板如下:
From: <发件人邮箱> To: <收件人邮箱> Subject: <邮件主题> Content-Type: text/plain; charset=utf-8 <邮件正文内容>
如果是HTML邮件,只需要把Content-Type改为text/html; charset=utf-8即可。
方案对比
你提到直接构造JSON方案可读性、可维护性更高,这个认知在仅发送纯文本/HTML无附件邮件时成立,但如果后续需要支持附件,raw方案的维护成本会更低:你只需要按照通用的RFC 2822标准拼接多部分内容即可,不需要记忆Gmail特有的嵌套JSON结构规则,适配场景更统一。
FileMaker 实现注意事项
你可以直接用FileMaker内置的Base64Encode函数生成编码后,再做简单的字符替换即可得到URL安全的Base64编码:
- 把编码结果中的
+替换为- - 把
/替换为_ - 删除末尾所有的
=填充字符
内容的提问来源于stack exchange,提问作者J7Ts
相关产品推荐
相关产品推荐

