Django-发送邮件

概述

Python中内置了一个smtp邮件发送模块,Django在此基础上进行了简单地封装,让我们在Django环境中可以更方便更灵活i的发送邮件。所有的功能都在django.core.mail中,常用的免费服务器有:163、126、QQ等。

SSL和TLS

SSL:(Secure Socket Layer,安全套接字层)位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

TLS:(Transport LayerSecurity,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。

我们通常所说的 HTTPS 协议,就是“HTTP 协议”和“SSL/TLS 协议”的组合。你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。浏览器地址栏的那把锁指的就是SSL协议。

TLS和SSL的关系:并列关系

最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL 3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL 3.0不能互操作。

TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS在SSL v3.0的基础上,提供了以下增加内容:

  • 更安全的MAC算法
  • 更严密的警报
  • “灰色区域”规范的更明确的定义

配置

首先,我们需要一个本地SMTP服务器或者在项目setting.py中添加以下设置来配置一个外部SMTP服务器:

  • EMAIL_HOST: SMTP服务器主机,默认为localhost。
  • EMAIL_PORT: SMTP服务器端口,默认为25。
  • EMAIL_HOST_USER: SMTP 服务器的用户名。
  • EMAIL_HOST_PASSWORD: SMTP 服务器的密码。
  • EMAIL_USE_TLS: 是否使用TLS安全连接,默认False。
  • EMAIL_USE_SSL: 是否使用SSL安全连接,默认False。

如果没有本地SMTP服务器,可以使用e-mail提供者的SMTP服务器。下面的简单配置是通过QQ服务器发送e-mail的配置。

# SMTP后端是Django的默认配置,如果要明确指定,请在settings中输入以下内容
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.qq.com"  # SMTP服务器主机
EMAIL_PORT = 25             # 端口
EMAIL_HOST_USER = "695485***@qq.com"       # 发送邮件的邮箱
EMAIL_HOST_PASSWORD = "*********"    # #邮箱的授权密码
EMAIL_USE_SSL= True
注意:

配置中,EMAIL_USE_TLS和EMAIL_USE_SSL都默认设置为False,需要配置其中一个为True,但是不能两个都设置为True。一般端口587对应TLS,端口465对应SSL。

阿里云默认禁用了25端口,使用465端口,EMAIL_USE_TLS=True

发送邮件

# 前面四个参数必须要写,后面的参数可以为空
def send_mail(subject, message, from_email, recipient_list,
              fail_silently=False, auth_user=None, auth_password=None,
              connection=None, html_message=None):
  • subject:一个字符串,发送邮件的主题。
  • message:一个字符串,邮件内容。
  • from_email:一个字符串,收件人看到的发件人,可以自己设定。
  • recipient_list:字符串列表,每个字符串都是电子邮件地址。每个成员可以在收件人字段中看到其他收件人。
# apps/utils/email_send.py
from django.core.mail import send_mail

def sendMail(request): 
    from_email = 'ray<695485075@qq.com>'
    msg = '<a href="http://127.0.0.1:8000/index/">点击激活</a>'
    send_mail("注册激活","",msg,from_email,recipient_list=['',])
    return HttpResponse("邮件已发送")

相关推荐