将静态文件中的图像添加到 Django 中的多部分电子邮件

Add image from static files to Multipart Email in Django

我正在尝试通过电子邮件发送徽标,并将其显示在电子邮件的 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 并通过安装在同一台机器上的 Postfix 发送邮件 Django 是 运行。

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

改用 EmailMessage.attach_file (EmailMessage reference)。

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 参数?)和多得多。我 advise/encourage 你阅读它的 github 页面 :-)。欢迎提出问题或添加功能请求!

yagmail可以通过pip安装获取:

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