【问题标题】:Attach generated PDF in Mailgun message Django/Python在 Mailgun 消息 Django/Python 中附加生成的 PDF
【发布时间】:2014-12-20 12:48:25
【问题描述】:

我正在尝试将我们的应用程序从 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)

上面没有附件可以正常工作。数据包含to、from、o:tags...等。

任何帮助将不胜感激。谢谢!

编辑

我能够通过更改我的 PDF 代码并正确构建 requests.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])

【问题讨论】:

    标签: python django email pdf mailgun


    【解决方案1】:

    根据docs,文件参数应该是字典或元组列表。它一定是在寻找某种名称。

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

    【讨论】:

    • 是的,问题是当它不是来自文件系统的要打开的文件时如何让它附加。我已经弄清楚并更新了我的问题。
    【解决方案2】:

    我能够通过更改我的 PDF 代码并正确构建 requests.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]
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2014-01-04
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多