Django使用SMTP发送邮件教程

CONTENTS

    • 1. SMTP介绍
    • 2. 申请邮箱授权码
    • 3. Django发送邮件

1. SMTP介绍

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过 SMTP 协议所指定的服务器,就可以把 E-mail 寄到收信人的服务器上了,整个过程只要几分钟。SMTP 服务器则是遵循 SMTP 协议的发送邮件服务器,用来发送或中转发出的电子邮件。

一个 SMTP 服务器总是有一个独特的地址,和一个用于发送邮件的特定端口,在大多数情况下是587。本文以使用 QQ 邮箱为例,因此我们将使用的地址是 smtp.qq.com,端口号是587。

2. 申请邮箱授权码

首先我们需要启用 QQ 邮箱的 SMTP 服务,并申请一个授权码,打开邮箱网页,然后在“设置-账号”选项卡中找到 SMTP 服务部分,点击开启服务:

在这里插入图片描述

进行相关的身份验证后会收到一串授权码如下:

在这里插入图片描述

3. Django发送邮件

首先在项目的 settings.py 文件中添加配置信息:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '******@qq.com'
EMAIL_HOST_PASSWORD = '******'RECIPIENT_ADDRESS = ['******@qq.com']

配置参数说明如下:

  • EMAIL_BACKEND:声明了我们的 Django 项目将用于连接 SMTP 服务器的后端。这个变量指向 smtp.EmailBackend 类,该类接收发送邮件所需的所有参数。虽然这个类是默认的 EMAIL_BACKEND,但在 Django 的设置中明确定义被认为是一个好的做法。
  • EMAIL_HOST:将要使用的 SMTP 服务器域,取决于你的电子邮件提供商。常用的有:smtp.qq.comsmtp.163.comsmtp.gmail.com 等。
  • EMAIL_PORT:SMTP 服务器端口号,587是大多数 SMTP 服务器的默认端口,对于个人电子邮件提供商来说,这一点仍然适用。
  • EMAIL_USE_TLS:TLS(Transport Layer Security,传输层安全协议),用于在两个应用程序之间提供保密性和数据完整性。在此处用于加密网络应用程序(Django)和服务器(SMTP 服务器)之间的通信。
  • EMAIL_HOST_USER:主机用户(发件人邮箱),设置是你的个人电子邮件地址。
  • EMAIL_HOST_PASSWORD:发件人的授权码,即从你的电子邮件帐户获得的应用程序密码。
  • RECIPIENT_ADDRESS:收件人邮箱列表。

现在假设我们的前端发来如下请求:

$.ajax({url: 'http://localhost:8000/sendemail/',type: 'GET',data: {message: message,},dataType: 'json',success: (resp) => {...}
});

然后我们需要在后端接收 message,并将其通过邮件(django.core.mail.send_mail 函数)发送给自己(即 settings 中的 EMAIL_HOST_USER 为自己的邮箱,RECIPIENT_ADDRESS 列表中也仅有一个自己的邮箱):

from django.http import JsonResponse
from django.core import mail
from django.conf import settingsdef sendEmail(request):data = request.GETmessage = data.get('message', '').strip()  # 如果没有的话返回空,且过滤掉空格if message:mail.send_mail(subject='在线计算器与编译器项目用户反馈',  # 题目message=message,  # 消息内容from_email=settings.EMAIL_HOST_USER,  # 发送者recipient_list=settings.RECIPIENT_ADDRESS,  # 接收者邮件列表)return JsonResponse({'result': 'success',})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt之QStackedLayout

QStackedLayout 一、简介 QStackedLayout 是 Qt 框架中的一个类,用于管理多个子控件,这些子控件被维护在一个堆栈中,并且只有其中一个子控件可以在任何时候可见。QStackedLayout 允许用户切换堆栈中的子控件,即显示或隐藏每个子…

【docker】dockerfile构建镜像

一、Dockerfile概念 Dockerfile 是一个文本文件,文件中包含了一条条的指令(instruction),用于构建镜像。每一条指定构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。 1、dockerfile是 自…

HTTP的基本格式

HTTP/HTTPS HTTPhttp的协议格式 HTTP 应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议. HTTP协议,就是最常用到的应用层协议. 使用浏览器,打开网站,使用手机app,加载数据,这些过程大概率都是HTTP来支持的 HTTP是一个超文本传输协议, 文本>字符串 超文本>除…

机器学习:决策树

决策树 决策树是一种基于树形结构的模型,决策树从根节点开始,一步步走到叶子节点(决策),所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。 特征选择 根节点的选择该用哪一个特征呢&#xff…

python安全工具开发基础

文章目录 拷贝、with、is深拷贝、浅拷贝with 三器一闭迭代器生成器闭包装饰器 动态绑定垃圾回收网络编程UdpTcp 协程mysql预处理防止注入 redis未授权/弱密码 拷贝、with 、is a [11, 22, 33] b [11, 22, 33] ca print(id(a)) print(id(b)) print(id(c))print(a b) print(…

麒麟操作系统设置QT程序开机自启动有效方法

在麒麟操作系统上设置QT程序开机自启动的两种简单有效的方法。支持请点赞! 一、QT程序打包 1.设置环境变量 设置QT和linuxdeployqt的环境变量,已设置可忽略该步骤。 在/etc/profile文件末尾添加一下内容: export PATH/usr/local/Qt-5.15.…

为什么你应该开始学习量子机器学习

一、介绍 你好!这里介绍全新知识--量子计算。在这里,我打算撰写和分享有关量子机器学习(QML)的文章。 我第一次听说量子计算是在2015年,当时我正在分析我的博士论文的可能性,我的前老板和导师告诉我研究这个…

AI 大框架分析基于python之TensorFlow(归一化处理,多类别分类的概率)

AI 大框架分析基于python之TensorFlow(归一化处理,多类别分类的概率) AI(人工智能)的大框架有很多种,以下是一些常见的AI框架: TensorFlow:由谷歌开发的开源机器学习框架,支持各种任务,包括图像…

Http常见问题

说说 HTTP 常用的状态码及其含义? HTTP 状态码首先应该知道个大概的分类: 1XX:信息性状态码2XX:成功状态码3XX:重定向状态码4XX:客户端错误状态码5XX:服务端错误状态码 301:永久性…

每日一题 279完全平方数(完全背包)

题目 完全平方数 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而…

matplotlib制图进阶版

需求:两个产品销量的可视化折线图 1、使用pandas读取数据 2、生成销售数量的折线图

深入了解快速排序:原理、性能分析与 Java 实现

快速排序(Quick Sort)是一种经典的、高效的排序算法,被广泛应用于计算机科学和软件开发领域。本文将深入探讨快速排序的工作原理、步骤以及其在不同情况下的性能表现。 什么是快速排序? 快速排序是一种基于分治策略的排序算法&am…

vue2与vue3 v-model的区别

目录 Vue 2中的v-model 默认使用 自定义使用 修饰符.sync (Vue2) Vue3.x 使用 v-model vue 3 的v-model使用原理 多个 v-model 使用 总结 Vue 2中的v-model 在Vue 2中,v-model是一个用于在子组件和父组件之间双向绑定数据的指令。当在子组件中使用v-mode…

java学习-day21(常用类)

文章目录 回顾:今天的内容1.常用类1.1StringBuffer类1.2枚举类(enum)1.3包装类1.4Math1.5Random类1.6System类1.7Runtime【不重要】1.8Date类1.9Calendar 回顾: 1.为什么重写equals方法必须重写hashCode方法是因为判断两个对象是…

聊聊分布式架构04——RPC通信原理

目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC(Remote Proc…

2023-10-07 LeetCode每日一题(股票价格跨度)

2023-10-07每日一题 一、题目编号 901. 股票价格跨度二、题目链接 点击跳转到题目位置 三、题目描述 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数&#xff08…

全栈开发笔记2:项目部署上线的三种方式

文章目录 最原始的方式宝塔Docker 部署其他 本文为编程导航实战项目学习笔记。 项目部署的三种方式: 最原始方式✅ yum 手动安装 jdk mysql tomcat nginx打包前端项目,放到某个目录,修改 nginx 配置修改线上的 mysql 配置,打包 j…

RK3568 适配LVDS屏XW101CM02

代码如下添加参数,只要是使用的是同款屏幕,那就可以直接使用里面所有参数,在相关的DTS文件进行修改 lvds_panel: lvds-panel {status = "okay";compatible = "simple-panel";backlight = <&backlight1>;reset-delay-ms = <20>;enable-d…

Mysql bin-log日志恢复数据与物理备份-xtrabackup

主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志&#xff0c;就记录对数据库进行的操作&#xff0c;什么增删改的操作全…

深度学习笔记之优化算法(三)动量法的简单认识

机器学习笔记之优化算法——动量法的简单认识 引言回顾&#xff1a;条件数与随机梯度下降的相应缺陷动量法简单认识动量法的算法过程描述附&#xff1a;动量法示例代码 引言 上一节介绍了随机梯度下降 ( Stochastic Gradient Descent,SGD ) (\text{Stochastic Gradient Descen…