You need to enable JavaScript to run this app. Python中如何向Gmail API发送multipart/mixed格式的批量请求
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何向Gmail API发送multipart/mixed格式的批量请求

实现方案

核心逻辑:无需依赖requests的multipart/form-data封装,手动构造符合Gmail API要求的multipart/mixed格式请求体即可,实现代码如下:

import requests
from tqdm import tqdm

# 存储所有message-id的列表
messages = tqdm(gmail.list_messages('me'))
gmailUrl = "https://gmail.googleapis.com/batch/gmail/v1"
# 自定义边界值,尽量特殊避免和请求内容冲突
BOUNDARY = "batch_gmail_request_20240520"

# 构造请求头
request_header = {
    "Host": "www.googleapis.com",
    "Content-Type": f"multipart/mixed; boundary={BOUNDARY}"
}

# 构造请求体
request_body = ""
# 每次取80个消息打包
for idx in range(0, min(80, len(messages))):
    msg_id = messages[idx]['id']
    # 每个子请求前加分隔符
    request_body += f"--{BOUNDARY}\r\n"
    # 子请求头
    request_body += "Content-Type: application/http\r\n\r\n"
    # 子请求内容:GET方法+对应接口路径
    request_body += f"GET /gmail/v1/users/me/messages/{msg_id}\r\n\r\n"
# 整个请求结束的收尾分隔符
request_body += f"--{BOUNDARY}--"

# 发送请求,用data参数传构造好的请求体,不要用files
response = requests.post(url=gmailUrl, auth=creds, headers=request_header, data=request_body)

# 输出返回结果,返回内容也是multipart/mixed格式,可按相同规则拆分每个子请求的返回
print(response.status_code)
print(response.text)

注意事项

  • 边界值可以自定义,只要保证不会出现在请求体的内容里即可,建议用带随机字符的字符串避免冲突
  • 每个子请求的格式要严格遵循规则,\r\n换行不能少,否则Gmail API会解析失败
  • 单批请求最多支持100个子请求,你设置的80个符合官方限制
  • 拿到返回结果后,按照同样的边界值拆分即可得到每个GET请求的返回内容,拆分时注意过滤掉分隔符和子请求头即可提取到json格式的消息数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:06:04