为 Sendgrid 的电子邮件 API 编码 CSV 文件

Bti*_*rt3 8 python email sendgrid

我正在尝试使用 R/Python 和 Sendgrid 的电子邮件 API 构建客户端报告引擎。我可以发送电子邮件,但我需要做的最后一件事是附加客户的 CSV 报告。

我尝试了多种方法,包括对文件进行 base64 编码并将字符串从 R 写入磁盘到 python,但不是运气。也就是说,我似乎陷入了这个错误:

类型错误:“字节”类型的对象不是 JSON 可序列化的

我到达那里的代码是:

with open('raw/test-report.csv', 'rb') as fd:
     b64data = base64.b64encode(fd.read())
attachment = Attachment()
attachment.content = b64data
attachment.filename = "your-lead-report.csv"
mail.add_attachment(attachment)
Run Code Online (Sandbox Code Playgroud)

令人困惑的是,如果我简单地b64data用线替换

attachment.content = 'TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12'
Run Code Online (Sandbox Code Playgroud)

发送带有附件的电子邮件。

作为参考,我一直在使用:

https://github.com/sendgrid/sendgrid-python

厨房水槽教程

在我的项目的最后一步之前没有任何问题。

任何帮助将不胜感激。值得注意的是,我的强项是在R,但我通常可以python在互联网的帮助下一起破解。

Olu*_*ule 5

您需要b64data先将其转换为常规字符串,然后再将其分配给attachment.content. Sendgrid 构建它在请求中发送的 JSON 有效负载,因此它不知道如何序列化分配给的值attachment.content,在这种情况下是bytestring.

str(b64data,'utf-8')
Run Code Online (Sandbox Code Playgroud)

参考: