Django使用SMTP发送邮件教程

CONTENTS

    • [1. SMTP介绍](#1. SMTP介绍)
    • [2. 申请邮箱授权码](#2. 申请邮箱授权码)
    • [3. Django发送邮件](#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 文件中添加配置信息:

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.com、smtp.163.com、smtp.gmail.com 等。
  • EMAIL_PORT:SMTP 服务器端口号,587是大多数 SMTP 服务器的默认端口,对于个人电子邮件提供商来说,这一点仍然适用。
  • EMAIL_USE_TLS:TLS(Transport Layer Security,传输层安全协议),用于在两个应用程序之间提供保密性和数据完整性。在此处用于加密网络应用程序(Django)和服务器(SMTP 服务器)之间的通信。
  • EMAIL_HOST_USER:主机用户(发件人邮箱),设置是你的个人电子邮件地址。
  • EMAIL_HOST_PASSWORD:发件人的授权码,即从你的电子邮件帐户获得的应用程序密码。
  • RECIPIENT_ADDRESS:收件人邮箱列表。

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

js 复制代码
$.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 列表中也仅有一个自己的邮箱):

py 复制代码
from django.http import JsonResponse
from django.core import mail
from django.conf import settings

def sendEmail(request):
    data = request.GET
    message = 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',
    })
相关推荐
海绵宝宝转agent3 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭3 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT4 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Elastic 中国社区官方博客4 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
2601_962071574 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
红海云5 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba5 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭5 小时前
达梦事物特性及MVCC
linux·运维·数据库
卷无止境5 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路5 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数