来自另一个API的PDF在转换后损坏,并通过Sendgrid发送电子邮件

时间:2016-10-13 23:06:54

标签: python base64 sendgrid

我正在使用API​​发送所请求PDF的二进制文件。我想通过SendGrid将其作为附件发送电子邮件,但我一直遇到问题。

到目前为止,我已经尝试过:

  • 直接使用它,不需要编码。结果:损坏的文件。
  • 查看Sendgrid的文档。根据Sendgrid,内容应该是"附件的Base64编码内容。"
  • 尝试了base64.b64encode(attachment_data)& binascii.b2a_base64(attachment_data)。结果:UnicodeEncodeError:' ascii'编解码器不能编码位置10-13中的字符:序数不在范围内(128)
  • 尝试了一种类型(attachment_data),它输出"输入' unicode' "
  • 尝试了base64.b64encode(attachment_data.encode(" utf-8"))& binascii.b2a_base64(attachment_data.encode(" UTF-8&#34))。结果:损坏的文件说明" Adob​​e Acrobat Reader DC无法打开' property_info.pdf'因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码)。"

我在Stackoverflow和SendGrid自己的Python Github上都找到了一些Q& A,但它似乎主要用于pdf文件,而不是二进制数据。大多数人似乎都说"将它编码为utf-8",但在这种情况下它最终会被破坏。关于我还能做什么的任何线索都能正确发送文件?

以下是执行Sendgrid的功能:

def to_sendgrid(my_email, other_email, text, attachment_data):
    subject = "Sample pdf attached."
    from_email = Email(my_email)
    to_email = Email(other_email)
    content = Content("text/plain", text)
    mail = Mail(from_email, subject, to_email, content)
    attachment_data = base64.b64encode(attachment_data.encode("utf-8"))
    attachment = Attachment()
    attachment.set_content(attachment_data)
    attachment.set_type("application/pdf")
    attachment.set_filename("sample.pdf")
    attachment.set_disposition("attachment")
    attachment.set_content_id("Sample")
    mail.add_attachment(attachment)

    try:
        sendgrid_client.client.mail.send.post(request_body=mail.get())
    except Exception as e:
        print str(e)

0 个答案:

没有答案