我正在尝试使用R/Python和Sendgrid的Email API构建一个客户端报告引擎。我可以发送电子邮件,但我需要做的最后一件事是附加客户端的CSV报告。
我尝试了很多方法,包括base64编码文件,并将字符串从R写入到python,但运气不好。这就是说,我似乎被这个错误卡住了:
TypeError:类型'bytes'的对象不是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)
令人困惑的是,如果我简单地将b64data
替换为
attachment.content = 'TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12'
发送带有附件的电子邮件。
作为参考,我一直在使用:
https://github.com/sendgrid/sendgrid-python
和
厨房Flume教程
在我项目的最后一步之前都没有遇到任何问题。
任何帮助将不胜感激。值得注意的是,我的强项是R
,但我通常可以在互联网的帮助下在python
中将东西组合在一起。
3条答案
按热度按时间mepcadol1#
在将
b64data
赋值给attachment.content
之前,需要将其转换为常规字符串。Sendgrid构建了一个JSON负载,它在请求中发送,所以它不知道如何序列化分配给attachment.content
的值,在本例中是bytestring
。参考资料:
ni65a41a2#
以下是如何将内存中的CSV附加到sendgrid电子邮件:
z4iuyo4d3#