使用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
相关产品推荐
相关产品推荐

