前言:

上一篇文章中我们讲到了Django内置模块中的send_mail方法发送邮件,这种方法的好处是语法简单,只需要设置几个简单的值就可以发送一封简单的邮件,但是这种方法发送的邮件没有样式,看起来非常单一,有样式之后担心兼容性问题?,EmailMultiAlternatives帮我们解决了这个问题

一、方法讲解

  • EmailMultiAlternatives
  • render_to_string
  • strip_tags
    这是我们这里会用到的方法

1、EmailMultiAlternatives

这是Django内置的一个发送邮件的模块,他可以发送html邮件,同时如果用户的浏览器不兼容html邮件,则发送的纯文本的邮件
语法讲解:

# 创建一个邮件对象
email_object = EmailMultiAlternatives(
	subject="您的邮箱验证码",
	body=text_content, # 去除html标签的邮件(也就是纯文本邮件)
	from_email='填写收到邮件显示的发件方名称 <发件邮箱>',
	to=[], # 发给哪些人
	# reply_to=[] 回复地址,通常不需要
)

email_object.attach_alternative(html_content,"text/html") # html邮件
result = email_object.send() # 发送邮件

2、render_to_string

render大家都知道
在render中的context中设置参数时会自动填充到html模板
例如:

html模板中
example.html

<h1>{{ msg }}</h1>

视图函数:

render(request,'example.html',{"msg":"你好世界"})

此时example.html就是

<h1>你好世界</h1>

render_to_string就是做的替换的这一步

 html_content = render_to_string('example.html',{"msg":"你好世界"})

返回一个替换好的html

3、strip_tags

在上一步中我们得到了一个html文件
怎么让他变成纯文本文件呢?

text_content = strip_tags(html_content)

这样就会去除他的html标签变成纯文本

二、使用示例

1、在邮箱设置中开启服务(这里以QQ邮箱为例)

在这里插入图片描述
开启后经过验证后会得到一个授权码,记住这个授权码

2、在settings.py中配置(此处以QQ邮箱示例)

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'  # 或其他邮件服务商
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'xxxxxx@qq.com'  # 发件人邮箱
EMAIL_HOST_PASSWORD = ''  # 邮箱授权码,不是密码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

3、编写测试视图函数

from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags

def send_email_test(request):
    email = '目标邮箱' # 目标邮箱,根据使用场景自行获取
    content = {
        "email_code":random.randint(1000,9999)
    }

    html_content = render_to_string('email.html',content)
    text_content = strip_tags(html_content)
    email_object = EmailMultiAlternatives(
        subject="您的邮箱验证码",
        body=text_content,
        from_email=f'淘宝网 <{settings.DEFAULT_FROM_EMAIL}>',
        to=[email],
        # reply_to=[] 回复地址,通常不需要
    )
    email_object.attach_alternative(html_content,"text/html")
    result = email_object.send()
    if result>0:
        return HttpResponse("发送成功")
    return HttpResponse("发送失败")

4、效果

在这里插入图片描述

三、补充

如果要添加附件
二、3的基础上

email_object.attach_file() # 填写文件路径(相对或绝对)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐