You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Gmail API获取草稿的原始SMTP内容?求转换方法

获取Gmail草稿原始SMTP内容的方法

Gmail API默认返回的users.drafts.Draft对象确实不包含message.raw字段,但你可以通过指定请求参数拿到完整的邮件结构化数据,再通过工具库转换为原始SMTP格式,具体方法如下:

1. 获取带完整内容的草稿邮件数据

调用users.drafts.get接口时,添加format=full参数,返回的draft.message会包含所有邮件头、正文及附件的结构化信息(如payload.headers、payload.parts等)。示例代码:

# 使用google-api-python-client的示例请求
service.users().drafts().get(userId='me', id='你的草稿ID', format='full').execute()

2. 将结构化数据转换为原始SMTP内容

方式1:用Python标准库email手动构建

从Gmail返回的结构化数据中提取头信息、正文,组装成MIME消息后生成原始SMTP格式:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import base64

def draft_to_smtp_raw(draft_msg):
    # 根据邮件类型初始化MIME对象
    if draft_msg['payload']['mimeType'].startswith('multipart/'):
        msg = MIMEMultipart()
    else:
        msg = MIMEText('', draft_msg['payload']['mimeType'].split('/')[1])

    # 添加所有邮件头
    for header in draft_msg['payload']['headers']:
        msg[header['name']] = header['value']

    # 处理正文和附件部分
    def process_part(part):
        if part['mimeType'] in ['text/plain', 'text/html']:
            # 解码正文内容
            content = base64.urlsafe_b64decode(part['body']['data']).decode('utf-8')
            msg.attach(MIMEText(content, part['mimeType'].split('/')[1]))
        elif 'filename' in part:
            # 处理附件
            attachment = MIMEBase(part['mimeType'].split('/')[0], part['mimeType'].split('/')[1])
            attachment.set_payload(base64.urlsafe_b64decode(part['body']['data']))
            encoders.encode_base64(attachment)
            attachment.add_header('Content-Disposition', f'attachment; filename="{part["filename"]}"')
            msg.attach(attachment)
        # 处理嵌套的子部分
        if 'parts' in part:
            for sub_part in part['parts']:
                process_part(sub_part)

    process_part(draft_msg['payload'])
    # 生成原始SMTP格式内容
    return msg.as_string()

方式2:借助第三方库简化操作

可以使用mailparser库辅助解析Gmail返回的结构化数据,再结合email库生成原始内容,核心逻辑仍基于MIME消息的组装,无需额外复杂配置。

注意事项

  • Gmail返回的内容采用urlsafe_base64编码,解码时需使用base64.urlsafe_b64decode而非普通base64解码。
  • 若草稿包含嵌套的多部分内容(如带附件的HTML邮件),需递归处理payload.parts中的子部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:30:39