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

使用Gmail API创建带附件草稿时附件显示为noname的解决问询

解决Gmail API添加附件无文件名的问题

你当前的代码里,附件显示无名称是因为调用EmailMessage.add_attachment()时没指定文件名参数——Gmail需要通过MIME头里的文件名信息来识别附件名称,而默认调用该方法不会自动添加这个信息。

优化后的代码(减少文件操作+解决文件名问题)

直接给add_attachment传入filename参数,同时用with语句自动管理文件句柄,避免手动关闭文件的冗余操作:

message = EmailMessage()
message.set_content(email['text'])
message['To'] = email['email']
message['cc'] = "--------@gmail.com"
message['Subject'] = email['subject']

# 处理附件
cv_filename = 'myfile.pdf'
cvtype, _ = mimetypes.guess_type(cv_filename)
cvtypemain, cvtypesub = cvtype.split("/")

# with语句自动关闭文件,无需手动调用close()
with open(cv_filename, "rb") as cvf:
    cv_data = cvf.read()
    # 关键:添加filename参数,Gmail会自动识别附件名称
    message.add_attachment(cv_data, cvtypemain, cvtypesub, filename=cv_filename)

encodedmsg = base64.urlsafe_b64encode(message.as_bytes()).decode()
create_draft_request_body = {"message": {"raw": encodedmsg}}
draft = service.users().drafts().create(userId="me", body=create_draft_request_body).execute()

补充说明

官方示例里的build_file_part函数,本质是手动构建包含文件名的MIME附件部件。而直接用add_attachment的filename参数可以完全替代这个函数的功能,不用额外编写复杂的MIME处理逻辑,同时with语句已经是最简洁的文件操作方式,能有效减少资源占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:31:07