将静态文件中的图像添加到Django中的Multipart Email

时间:2015-08-26 15:33:05

标签: python django email python-3.4

我正在尝试使用电子邮件发送徽标,并将其显示在电子邮件的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发送邮件。

2 个答案:

答案 0 :(得分:2)

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

改为使用EmailMessage.attach_fileEmailMessage reference)。

答案 1 :(得分:-1)

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