Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用Sendgrid发送Weasyprint PDF电子邮件附件_Python_Django_Pdf_Sendgrid_Weasyprint - Fatal编程技术网

Python使用Sendgrid发送Weasyprint PDF电子邮件附件

Python使用Sendgrid发送Weasyprint PDF电子邮件附件,python,django,pdf,sendgrid,weasyprint,Python,Django,Pdf,Sendgrid,Weasyprint,我正在用Sendgrid发送Weasyprint生成的PDF。Sendgrid Python库抛出了一个错误HTTP错误400:错误请求,我认为这是由于附件的编码有问题(Sendgrid希望附件在base64中) html_-page,css_-page=generatePDF(url)#从url生成html和css pdf=html_页面。write_pdf(stylesheets=css_页面)#将html和css的pdf编译为字节字符串 pdf=base64.b64编码(pdf).deco

我正在用Sendgrid发送Weasyprint生成的PDF。Sendgrid Python库抛出了一个错误
HTTP错误400:错误请求
,我认为这是由于附件的编码有问题(Sendgrid希望附件在base64中)

html_-page,css_-page=generatePDF(url)#从url生成html和css
pdf=html_页面。write_pdf(stylesheets=css_页面)#将html和css的pdf编译为字节字符串
pdf=base64.b64编码(pdf).decode()#base64编码pdf
数据={
“个性化设置”:[
{
“致”:[
{
“电子邮件”:数据[“发送到”]
}
],
“主题”:数据[“主题”]
}
],
“发件人”:{
“电子邮件”:数据[“来自”]
},
“内容”:[
{
“类型”:“文本/普通”,
“值”:数据[“文本”]
},
{
'type':'text/html',
'value':'{}

'.格式(数据['html']) } ], “答复”:{ “名称”:“{}”。格式(发件人名称), “电子邮件”:“{}”。格式(发件人电子邮件) }, “附件”:{ “内容”:pdf, “文件名”:数据[“文件名”], “类型”:“应用程序/pdf” } } sg=sendgrid.SendGridAPIClient(apikey=sendgrid\u API\u SECRET) rq=sg.client.mail.send.post(请求体=数据)

我发现了类似的问题,但发布的解决方案没有解决我的问题。谢谢。

我在base64中编码pdf文件时遇到了同样的问题。我找到了解决办法。我在这里发了一个帖子->如果它能帮助你。
html_page, css_page = generatePDF(url) # Generates HTML and CSS from URL
pdf = html_page.write_pdf(stylesheets=css_page) # Compiles PDF from HTML and CSS as bytes string

pdf = base64.b64encode(pdf).decode() # Base64 encodes PDF

data = {
    'personalizations' : [
        {
            'to' : [
                {
                    'email' : data['to']
                }
            ],
            'subject' : data['subject']
        }
    ],
    'from' : {
        'email' : data['from']
    },
    'content' : [
        {
            'type' : 'text/plain',
            'value' : data['text']
        },
        {
            'type' : 'text/html',
            'value' : '<html><p>{}</p></html>'.format(data['html'])
        }
    ],
    'reply_to' : {
        'name' : '{}'.format(sender_name),
        'email' : '{}'.format(sender_email)
    },
    'attachments' : {
        'content' : pdf,
        'filename' : data['filename'],
        'type' : 'application/pdf'
    }
}

sg = sendgrid.SendGridAPIClient(apikey = SENDGRID_API_SECRET)
rq = sg.client.mail.send.post(request_body = data)