Django:如何发送带有嵌入图像的HTML电子邮件

Est*_*man 18 html email django image

如何发送包含嵌入图像的HTML电子邮件?HTML应该如何链接到图像?图像应添加为MultiPart电子邮件附件?

任何例子都非常感激.

Why*_*ugo 9

我使用 django 的邮件系统实现了 op 要求的内容。好处是它将使用 django 设置进行邮件发送(包括用于测试的不同子系统等。我在开发过程中也使用 mailhogs)。这也是相当高的水平:

from django.conf import settings
from django.core.mail import EmailMultiAlternatives


message = EmailMultiAlternatives(
    subject=subject,
    body=body_text,
    from_email=settings.DEFAULT_FROM_EMAIL,
    to=recipients,
    **kwargs
)
message.mixed_subtype = 'related'
message.attach_alternative(body_html, "text/html")
message.attach(logo_data())

message.send(fail_silently=False)
Run Code Online (Sandbox Code Playgroud)

logo_data 是一个附加标志的辅助函数(在这种情况下我想附加的图像):

from email.mime.image import MIMEImage

from django.contrib.staticfiles import finders


@lru_cache()
def logo_data():
    with open(finders.find('emails/logo.png'), 'rb') as f:
        logo_data = f.read()
    logo = MIMEImage(logo_data)
    logo.add_header('Content-ID', '<logo>')
    return logo
Run Code Online (Sandbox Code Playgroud)

  • 这是发送内嵌图像的电子邮件的最短且最好的方式。想要特别确认使用“@lru_cache”是非常明智的,但您忘记将“from functools import lru_cache”添加到标头中。另外,对于这个答案的追随者 - 这是 HTML 模板: `body_html = """&lt;html&gt;&lt;img src="cid:logo" alt="logo image"&gt;&lt;/html&gt;"""` (4认同)

bak*_*048 8

http://djangosnippets.org/snippets/285/

你必须使用MultiPart和cid:发送带图像的HTML邮件几乎总是一个坏主意.它为您的邮件和smtp服务器提供垃圾邮件点...

  • 这似乎没有使用django的邮件系统,但是使用了python的smtplib。 (2认同)

bx2*_*bx2 6

请记住,django只提供标准smtplib的包装器 - 我不知道它是否会有所帮助,但试着看看这个例子:http://code.activestate.com/recipes/473810-send-an-html-email-与嵌入图像和-纯吨/

所以我猜你可以用EmailMessage's标题值来定义这个'image1' - 消息标题是一个值的字典,所以只需添加类似的东西{'Content-ID': '<image1>'}.

然后使用将文件附加到您的电子邮件中attach().之后,您可以使用代码生成如下的html消息:

html_content = '<b>Some HTML text</b> and an image: <img src="cid:image1">'
Run Code Online (Sandbox Code Playgroud)