11.使用Django发送邮件

作者: liujiangblog | 来源:发表于2019-04-23 11:37 被阅读0次

通常而言,我们在用户注册成功,实际登陆之前,会发送一封电子邮件到对方的注册邮箱中,表示欢迎。进一步的还可能要求用户点击邮件中的链接,进行注册确认。

下面就让我们先看看如何在Django中发送邮件吧。

一、在Django中发送邮件

其实在Python中已经内置了一个smtp邮件发送模块,Django在此基础上进行了简单地封装。

首先,我们需要在项目的settings文件中配置邮件发送参数,分别如下:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.sina.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'xxx@sina.com'
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxx'
  • 第一行指定发送邮件的后端模块,大多数情况下照抄!
  • 第二行,不用说,发送方的smtp服务器地址,建议使用新浪家的;
  • 第三行,smtp服务端口,默认为25;
  • 第四行,你在发送服务器的用户名;
  • 第五行,对应用户的密码。

特别说明:

  • 某些邮件公司可能不开放smtp服务
  • 某些公司要求使用ssl安全机制
  • 某些smtp服务对主机名格式有要求

这些都是前人踩过的坑。如果你在测试中出现了问题,请不要找Django的麻烦,99%的原因和你的邮件服务有关。

配置好了参数,就可以先测试一下邮件功能了。

在项目根目录下新建一个send_mail.py文件,然后写入下面的内容:

import os
from django.core.mail import send_mail

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

if __name__ == '__main__':   

    send_mail(
        '来自www.liujiangblog.com的测试邮件',
        '欢迎访问www.liujiangblog.com,这里是刘江的博客和教程站点,本站专注于Python、Django和机器学习技术的分享!',
        'xxx@sina.com',
        ['xxx@qq.com'],
    )

对于send_mail方法,第一个参数是邮件主题subject;第二个参数是邮件具体内容;第三个参数是邮件发送方,需要和你settings中的一致;第四个参数是接受方的邮件地址列表。请按你自己实际情况修改发送方和接收方的邮箱地址。

另外,由于我们当前是单独运行send_mail.py文件,无法自动链接Django环境,需要通过os模块对环境变量进行设置,也就是:

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

运行send_mail.py文件,注意不是运行Django服务器。然后到你的目的地邮箱查看邮件是否收到。

image.png

二、发送HTML格式的邮件

通常情况下,我们发送的邮件内容都是纯文本格式。但是很多情况下,我们需要发送带有HTML格式的内容,比如说超级链接。一般情况下,为了安全考虑,很多邮件服务提供商都会禁止使用HTML内容,幸运的是对于以httphttps开头的链接还是可以点击的。

下面是发送HTML格式的邮件例子。删除send_mail.py原来的所有内容,添加下面的代码:

import os
from django.core.mail import EmailMultiAlternatives

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

if __name__ == '__main__':

    subject, from_email, to = '来自www.liujiangblog.com的测试邮件', 'xxx@sina.com', 'xxx@qq.com'
    text_content = '欢迎访问www.liujiangblog.com,这里是刘江的博客和教程站点,专注于Python和Django技术的分享!'
    html_content = '<p>欢迎访问<a href="http://www.liujiangblog.com" target=blank>www.liujiangblog.com</a>,这里是刘江的博客和教程站点,本站专注于Python、Django和机器学习技术的分享!</p>'
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
    msg.attach_alternative(html_content, "text/html")
    msg.send()

其中的text_content是用于当HTML内容无效时的替代txt文本。

打开测试用的接收邮箱,可以看到链接能够正常点击,如下图所示:

image.png

这个send_mail.py文件只是一个测试脚本,使用完毕后可以从项目里删除。

相关文章

  • 11.使用Django发送邮件

    通常而言,我们在用户注册成功,实际登陆之前,会发送一封电子邮件到对方的注册邮箱中,表示欢迎。进一步的还可能要求用户...

  • 2018-07-17

    发送邮件 django中内置了邮件发送功能,被定义在django.core.mail模块中,发送邮件需要使用SMT...

  • smtp服务器开启

    发送邮件 Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMT...

  • email

    1. django 发送邮件 settings.py中配置发送邮件邮箱 使用send_mail方法发送邮件

  • Python之发送邮件

    Python之发送邮件 使用SMTP模块发送邮件 发送HTML文件 发送带附件的文件 Django发送文件 各大邮...

  • Django——发送邮件和缓存

    发送邮件 概述:Django 中内置了邮件发送功能,发送邮件需要使用 SMTP服务,常用的免费服务器有:163、1...

  • 使用django发送邮件

    django通过封装python的smtplib实现发送邮件功能。django 1.11官网翻译内容见:http:...

  • django修行路杂项

    django发邮件 我们使用了django.core.mail.send_mail函数来发送e-mail。 这个函...

  • 使用Django+Celery+Redis实现异步发送邮件

    使用django+celery+redis实现异步发送邮件 一、首先在django项目的settings添加一下的...

  • 在django中发送邮件

    在Django中发送邮件很简单,只需要使用django.core.mail中的send_mail函数即可实现。具体...

网友评论

    本文标题:11.使用Django发送邮件

    本文链接:https://www.haomeiwen.com/subject/tuluiqtx.html