首页 文章

在Mailgun消息Django / Python中附加生成的PDF

提问于
浏览
7

我正在尝试将我们的应用程序从python邮件切换到Mailgun,但是我遇到了带有附件的电子邮件的问题 . 特别是由应用程序生成的PDF(未存储在文件系统中) .

发送没有附件的电子邮件没有问题 .

目前我们生成PDF如下:

pdf = StringIO()
draw_pdf(pdf, params)
pdf.seek(0)
attachment = MIMEApplication(pdf.read())
attachment.add_header("Content-Disposition", "attachment", filename=filename)
pdf.close()

然后附上并邮寄它:

from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives(subject, text_content, from_email, to_email)

if html_content:
    msg.attach_alternative(html_content, "text/html")

if attachment:
    msg.attach(attachment)

msg.send()

效果很好......我们如何转换为Mailgun电话?

我尝试了各种各样的事情,包括将其作为文件原样传递(失败):

requests.post(mailgun_url, auth=("api", mailgun_api), data=data, files=attachment)

以上工作正常,没有附件 . 数据包含,来自,o:标签......等 .

任何帮助,将不胜感激 . 谢谢!

编辑

通过更改我的PDF代码并获取request.post结构正确,我能够使它工作:

filename = "pdf_attachment.pdf"
pdf = StringIO()
draw_pdf(pdf, params)
pdf.seek(0)

attachment = ("attachment", (filename, pdf.read()))

r = requests.post(mailgun_url, auth=("api", mailgun_api), data=data, files=[attachment])

2 回答

  • 2

    根据docs,files参数应该是字典或元组列表 . 它必须寻找某种名称 .

    requests.post(
        ...,
        files=[("attachment", open("files/test.jpg"))],
    )
    
  • 1

    通过更改我的PDF代码并获取request.post结构正确,我能够使它工作:

    filename = "pdf_attachment.pdf"
    pdf = StringIO()
    draw_pdf(pdf, params)
    pdf.seek(0)
    
    attachment = ("attachment", (filename, pdf.read()))
    
    r = requests.post(mailgun_url, auth=("api", mailgun_api), data=data, files=[attachment]
    

相关问题