邮件模块

Django内置了django.core.mail这个模块,我们使用它能够很方便的发送邮件。

配置SMTP服务器

首先在工程配置settings.py中,加入邮件SMTP服务器相关的内容,这里以QQ邮箱为例。

settings.py

EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'gacfox@qq.com'
EMAIL_HOST_PASSWORD = 'qqqqvlaaaaojkkkk'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
EMAIL_USE_SSL = True

注:QQ邮箱需要手动开启SMTP服务接入,并获取密码,上面例子中的密码并不是真实的。

发送邮件

这里我们直接编写一个View方法,浏览器访问这个方法,就会触发发送邮件的操作。

def mail_test(request):
    mail.send_mail(subject='测试标题',
                   message='测试邮件内容',
                   from_email=settings.EMAIL_HOST_USER,
                   recipient_list=['demo@gacfox.com'])
    return HttpResponse('OK')

其中send_mail的几个关键字参数意义如下:

  • subject:邮件标题
  • message:邮件内容
  • from_email:发送人
  • recipient_list:接收人

发送HTML邮件

上面发送邮件的内容是纯文本的,Django也支持发送HTML的富文本邮件,但这需要借助模板引擎的渲染功能,将我们的数据渲染成HTML,下面代码是一个例子。

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
    <meta charset="UTF-8">
    <title>测试表格</title>
</head>
<body>
<table>
    <tr>
        <td>用户名</td>
        <td>密码</td>
    </tr>
    {% for d in data %}
        <tr>
            <td>{{ d.username }}</td>
            <td>{{ d.password }}</td>
        </tr>
    {% endfor %}
</table>
</body>
</html>
from django.core import mail
from django.http import HttpResponse
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from demo import settings


def mail_test(request):
    tpl_rendered = render_to_string('mail.html', {
        'data': [
            {'username': 'Tom', 'password': 'abc123'},
            {'username': 'Lucy', 'password': 'hello'},
            {'username': 'Lily', 'password': '54321'}
        ]
    })
    mail.send_mail(subject='账户信息',
                   message=strip_tags(tpl_rendered),
                   html_message=tpl_rendered,
                   from_email=settings.EMAIL_HOST_USER,
                   recipient_list=['demo@gacfox.com'])
    return HttpResponse('OK')

上面代码中,我们使用render_to_string()手动调用Django的模板引擎来将数据渲染成模板的HTML内容,然后作为字符串返回,send_mail()函数中,我们额外添加了一个关键字参数html_message,这个参数包含的内容就是富文本的邮件。但是并不是所有的邮件客户端都支持富文本,message参数还是有必要存在的,这里我们使用strip_tags()函数将渲染结果中的HTML标签都去掉了,作为纯文本方式的结果。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。