调用Gmail API的message.send接口所需的cURL请求头有哪些?
问题核心原因
你遇到的400错误不是请求头缺失,是Content-Type配置与请求体格式不匹配导致的。
你当前设置的Content-Type: message/rfc822要求请求体直接为完整的RFC822格式邮件内容,不能包裹JSON外壳。你提交的JSON结构只有在Content-Type为application/json时才能被正确解析,Gmail无法从message/rfc822类型的请求体中解析JSON里的收件人信息,因此返回Recipient required错误。
调用Gmail发信接口必填请求头
Authorization: Bearer <accessToken>:必填,accessToken需要提前申请https://www.googleapis.com/auth/gmail.send发送权限Content-Type:必填,根据你的请求体格式二选一:- 如果请求体是带
raw字段的JSON,填application/json - 如果请求体是完整的RFC822原始邮件内容,填
message/rfc822
- 如果请求体是带
两种场景的正确cURL示例
场景1:使用JSON包裹base64url编码的邮件内容(适合无大附件的普通邮件)
curl -X POST \ "https://gmail.googleapis.com/gmail/v1/users/me/messages/send" \ -H "Authorization: Bearer <替换为你的实际accessToken>" \ -H "Content-Type: application/json" \ -d '{ "raw": "<替换为你的完整base64url编码的RFC2822邮件内容>" }'
注意:该场景下JSON仅需保留raw字段即可,你示例中的payload字段为冗余参数,不需要传入,raw字段已包含完整的收件人、发件人、主题、正文信息,Gmail会优先解析raw内容。
场景2:直接提交RFC822原始邮件(适合带大附件的邮件,需使用upload接口)
如果你的邮件大于5MB,使用upload接口,直接提交.eml格式的原始邮件文件:
curl -X POST \ "https://gmail.googleapis.com/upload/gmail/v1/users/me/messages/send" \ -H "Authorization: Bearer <替换为你的实际accessToken>" \ -H "Content-Type: message/rfc822" \ --data-binary @<替换为你的.eml邮件文件路径>
内容的提问来源于stack exchange,提问作者J7Ts
相关产品推荐
相关产品推荐

