Django发送邮件

在网站开发中,是发送短信是必不可少的,比如的网站有个需要填写的表单,只要用户填写了表单,后台就会给后台管理员发送邮件。

配置相关参数

在 settings.py 的最后面加上类似这些

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  #email后端
EMAIL_USE_TLS = False   #是否使用TLS安全传输协议
EMAIL_USE_SSL = True    #是否使用SSL加密,qq企业邮箱要求使用
EMAIL_HOST = 'smtp.exmail.qq.com'   #发送邮件的邮箱 的 SMTP服务器,这里用了qq企业邮箱,如果是163邮箱这用smtp.163.com
EMAIL_PORT = 465     #发件箱的SMTP服务器端口
EMAIL_HOST_USER = 'xxx@qq.com'    #发送邮件的邮箱地址
EMAIL_HOST_PASSWORD = '*********'         #发送邮件的邮箱密码

EMAIL_USE_SSLEMAIL_USE_TLS 是互斥的,即只能有一个为 True

发送邮件

发送单个邮件

# views.py
from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)

一次性发送多个邮件

from django.core.mail import send_mass_mail


message1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])


send_mass_mail((message1, message2), fail_silently=False)

备注:send_mail每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail

发送附件

如果我们想在邮件中添加附件,发送 html 格式的内容

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


from_email = settings.DEFAULT_FROM_EMAIL
# subject 主题 content 内容 to_addr 是一个列表,发送给哪些人
msg = EmailMultiAlternatives(subject, content, from_email, [to_addr])

msg.content_subtype = "html"

# 添加附件(可选)
msg.attach_file('./twz.pdf')

# 发送
msg.send()

上面的做法可能有一些风险,除非你确信你的接收者都可以阅读 html 格式的 邮件。

为安全起见,你可以弄两个版本,一个纯文本(text/plain)的为默认的,另外再提供一个 html 版本的(好像好多国外发的邮件都是纯文本的)

from __future__ import unicode_literals

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

subject = '来自多点笔记的问候'

text_content = '这是一封重要的邮件.'

html_content = '<p>这是一封<strong>重要的</strong>邮件.</p>'

msg = EmailMultiAlternatives(subject, text_content, from_email, [to@youemail.com])

msg.attach_alternative(html_content, "text/html")

msg.send()
最后修改:2020年6月26日 10:04