通过Gmail API发送后,pdf损坏

时间:2019-03-10 10:56:17

标签: python email encoding gmail attachment

我目前正在尝试通过Gmail API发送pdf附件,但是我收到的文件似乎已损坏。这是我用来创建电子邮件的代码。

message_out = MIMEMultipart()
content_type, encoding = mimetypes.guess_type(attachment)
if content_type is None or encoding is not None:
    content_type = 'application/octet-stream'
main_type, sub_type = content_type.split('/', 1)  


with open(attachment, 'rb') as fp:
        msg = MIMEBase(main_type, sub_type)
        msg.set_payload(fp.read())
filename = os.path.basename(attachment)
msg.add_header('Content-Disposition', 'attachment', filename=filename)
msg.add_header('Content-Type', main_type, name=filename)
msg.add_header('Content-Transfer-Encoding', '7bit')
email.encoders.encode_base64(msg)
message_out.attach(msg)

return {'raw': base64.urlsafe_b64encode(message_out.as_bytes()).decode()}

当我尝试打开附件时,然后显示“无法加载PDF文档”。我想这与编码有关,但我想不通为什么,我以为email.encoders可以解决我所有的问题。 (png图像也会发生同样的问题)

非常感谢你, 贾祖里

1 个答案:

答案 0 :(得分:0)

正如预期的那样,这是一个编码问题,即行

msg.add_header('Content-Transfer-Encoding', '7bit')

不应该在那里