Sendgrid で Weasyprint によって生成された PDF を電子メールで送信しようとしています。Sendgrid Python ライブラリがエラーHTTP Error 400: Bad Request
をスローしています。これはあまり説明的ではありませんが、添付ファイルのエンコーディングの問題が原因であると考えられます (Sendgrid は base64 での添付ファイルを必要とします)。
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)
ここで同様の問題を見つけましたが、投稿された解決策では問題が解決しませんでした。ありがとう。