使用Postman测试Gmail API发送接口时遇收件人地址必填错误
嘿,我之前用Postman测试Gmail API的时候也踩过这个坑!这个错误看着是说缺收件人,但大概率是你对API的请求格式理解错了,咱们一步步来搞定它:
1. 先确认你用对了端点(和参数)
你现在用的是https://www.googleapis.com/upload/gmail/v1/users/me/messages/send——这个是用来发送带附件的邮件的专用端点,用它的话必须在URL里加上uploadType参数,比如:https://www.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=media(仅发送纯文本/HTML邮件)或者uploadType=multipart(带附件)。
如果只是测试发送普通无附件邮件,其实用普通端点更简单:https://www.googleapis.com/gmail/v1/users/me/messages/send,不需要加upload相关参数。
2. 核心问题:邮件内容必须是Base64URL编码的RFC 2822格式
这是大多数人踩的坑:Gmail API不接受直接传JSON格式的收件人、主题字段,你必须把完整的邮件内容(包括收件人、主题、正文)组装成标准的RFC 2822邮件格式,再做Base64URL编码(注意是URL安全的Base64,把+换成-,/换成_,去掉末尾的=),最后把编码后的字符串放在请求体的raw字段里。
举个具体的例子:
第一步:构造原始邮件内容
To: test-recipient@example.com Subject: 测试邮件(来自Postman) 这是邮件的正文内容,随便写点啥都行~
第二步:对这段内容做Base64URL编码
你可以用在线工具或者Postman的预请求脚本生成,比如上面的内容编码后会得到类似这样的字符串:VG86IHRlc3QtcmVjaXBpZW50QGV4YW1wbGUuY29tClN1YmplY3Q6IOiAg+W4puWbvuWkqeWbvuWkpuWwj+WIl+W4puS4jeWbvuWkqShQb3N0bWFuKQoK6L+Z5piv6ZuF5L2g55qE5q2j5a2X5YaF5a6577yM5LqG5LqG5LiA5Liq5LiK5YWo44CC
第三步:构造请求体
把编码后的字符串放在raw字段里,请求体是JSON格式:
{ "raw": "VG86IHRlc3QtcmVjaXBpZW50QGV4YW1wbGUuY29tClN1YmplY3Q6IOiAg+W4puWbvuWkqeWbvuWkpuWwj+WIl+W4puS4jeWbvuWkqShQb3N0bWFuKQoK6L+Z5piv6ZuF5L2g55qE5q2j5a2X5YaF5a6577yM5LqG5LqG5LiA5Liq5LiK5YWo44CC" }
3. 检查请求头配置
确保你的请求头里有这两个关键项:
Authorization: Bearer {你的Gmail API访问令牌}:令牌必须包含https://www.googleapis.com/auth/gmail.send的权限范围Content-Type: application/json:如果用普通端点或者uploadType=media的上传端点,这个类型是对的;如果是带附件的uploadType=multipart,则要改成multipart/related
4. Postman里的操作步骤总结
- 新建POST请求,填入正确的端点URL(带或不带upload参数,看你是否要发附件)
- 切换到「Headers」标签,添加上面提到的两个请求头
- 切换到「Body」标签,选择「raw」,格式选「JSON」
- 粘贴包含
raw字段的JSON请求体(注意raw值是正确编码后的邮件内容) - 点击发送,应该就能成功发送邮件了!
如果还是报错,先检查编码后的邮件内容里有没有正确包含To:字段,再确认访问令牌的权限是否正确——这两个是最容易出问题的点。
内容的提问来源于stack exchange,提问作者Alex Buhse

