【问题标题】:Add image from static files to Multipart Email in Django将静态文件中的图像添加到 Django 中的多部分电子邮件
【发布时间】:2015-11-20 17:49:03
【问题描述】:

我正在尝试随电子邮件一起发送徽标,并将其显示在电子邮件的 HTML 部分中。我正在这样构建我的电子邮件:

    mail_subject = _("Subject of email %s" %
                     self.get_company_display())
    from_email = "test@test.com"

    message = EmailMultiAlternatives(mail_subject, mail_txt, from_email,
                                     ['destination@email.com'])
    message.attach_alternative(mail_html, 'text/html')
    message.attach('logo.png', static('myapp/images/logo.png'))
    message.send()

在我的邮件模板中,我有:

<img src="cid:logo.png">

我收到了电子邮件,但图像没有出现在电子邮件中。事实上,这封电子邮件似乎没有将图片作为附件。

使用 Python 3.4、Django 1.8.4 并通过安装在 Django 运行的同一台机器上的 Postfix 发送邮件。

【问题讨论】:

    标签: python django email python-3.4


    【解决方案1】:

    EmailMessage.attach 方法期望传递文件的内容而不是其路径,您实际上所做的是将static('myapp/images/logo.png') 返回的字符串附加到消息中。

    请改用EmailMessage.attach_file (EmailMessage reference)。

    【讨论】:

      【解决方案2】:

      yagmail(我是开发人员)的全部目的是让发送电子邮件变得非常容易,尤其是需要 HTML 或附件的时候。

      请尝试以下代码:

      import yagmail
      yag = yagmail.SMTP(from_add, password) # add host="" and port=
      contents = ['See my attachment below', '/home/static/images/logo.png']
      yag.send(contents = contents)
      

      请注意这里的神奇之处:contents 是一个列表,其中一个等于文件路径的项目将被自动加载、猜测并附加 mimetype。

      其中涉及更多魔法,例如易于嵌入图像、无密码脚本、无用户名脚本、简单别名、智能默认值(注意我省略了tosubject 参数?)等等。我建议/鼓励您阅读其github 页面:-)。随时提出问题或添加功能请求!

      你可以通过pip安装得到yagmail:

      pip install yagmail # Python 2
      pip3 install yagmail # Python 3
      

      【讨论】:

      • 谢谢,但我并不是真的在寻找 SMTP 客户端,更不用说 Gmail 客户端了。就像我说的,该工具使用本地 Postfix 安装。话虽如此,您的工具看起来可能非常有用!只是不是在这种特殊情况下。
      • 别被这个名字骗了;它实际上可以使用任何主机。只是主机/端口是 gmail 默认值。将主机和端口设置为当前信息将允许它工作,只要它使用 SMTP(this django/postfix question 描述。祝你好运!
      猜你喜欢
      • 2015-01-02
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2018-03-18
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多