当前位置: 首页 > news >正文

Django 发送邮件

1. Django 发送邮件

一般在用户注册成功后,会发送一封电邮给对方注册邮箱。进一步还可能要去用户点击邮件中链接以进行注册确认。

1.1 发送纯文本邮件

Python 内置邮件发送模块 smtp,Django 对 smtp 模板进行了简单的封装。

  1. 首先在项目中配置 settings :
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'	# 模块
EMAIL_HOST = 'smtp.sina.com'		# 发送方 smtp 服务器地址,这里用的是新浪
EMAIL_PORT = 25				# 默认 smtp 端口
EMAIL_HOST_USER = 'xxx@sina.com'		# 发送服务器用户名
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxx'		# 授权码

# QQ:smtp.qq.com  (端口465或587) pop.qq.com 端口995

Tips

  • 需要事先开启邮箱的 stmp 服务
  • 有些邮件公司不开放 smtp 服务,有些需要 ssl 安全机制等
  • 网易邮箱发送成功率高
  1. 在项目根目录下新建一个 send_mail.py文件,然后写入下面的内容:
import os
from django.core.mail import send_mail

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

if __name__ == '__main__':
    #  纯文本邮件
    send_mail(
        '来自 127.0.0.1:8080 的测试邮件',      # 主题 subject
        '欢迎访问 127.0.0.1:8080,这里是。。。',    # 邮件内容
        'xxxxxx@163.com',          # 发送方
        ['xxxx@qq.com'],       # 接收方
    )

运行 send_mail.py 文件,测试是否发送成功。

1.2. 发送 HTML 格式邮件

很多情况下我们在注册某个网站时,会发送一封邮件给我们的邮箱,这个邮件是超链接的格式发送的,确认后一般可以再定位到网站登录界面。

为了安全考虑,邮件服务提供商都会禁止使用 HTML 内容,但是对 httphttps 开头的链接还是可以点击的。

下面我们在 Django 中实现发送带 HTML 格式的邮件:

import os
from django.core.mail import EmailMultiAlternatives

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

if __name__ == '__main__':
   subject, from_email, to = '来自127.0.0.1:8080的测试邮件', 'xxx@163.com', 'xxx@qq.com'
   text_content = '欢迎访问 127.0.0.1:8080'
   html_content = '<p>欢迎访问<a href="https://www.baidu.com" target=blank>www.baidu.com</a>,这里是xxx的博客网站</p>'

   msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
   msg.attach_alternative(html_content, 'text/html')
   msg.send()

正常情况会发送 html_content 中内容,如果发送无效将会发送 text_content

示例

下面是一个 HTML 邮件示例,可以单独新建一个文件,然后在视图中调用即可,也可以直接在视图中定义:

from django.core.mail import EmailMultiAlternatives
from django.conf import settings


def send_email(email, code):
    subject = '来自127.0.0.1:8080的测试邮件'
    text_content = '感谢注册 127.0.0.1:8080,这里是xxx的博客,如果你看到这条消息!' \
                   '说明你的邮箱服务器不支持 HTML 链接功能,请联系管理员!'
    html_content = """
                    <p>感谢注册<a href='https://{}/confirm/?code={}' target=blank>www.baidu.com</a>
                    这里是xxx的博客
                    </p>
                    <p>请点击站点链接完成注册确认!</p>
                    <p>此链接有效期为{}天!</p>
                    """.format('127.0.0.1:8080', code, settings.CONFIRM_DAYS)

    msg = EmailMultiAlternatives(subject, text_content, settings.EMAIL_HOST_USER, [email])
    msg.attach_alternative(html_content, 'text/html')
    msg.send()
from django.shortcuts import render
from django.conf import settings

def index(request):
    code = 1234
    email = request.POST.get('email')
    # 发送邮件
    send_mail.send_email(email, code)
    return render(request, 'xxx/xxx.html')

相关文章:

  • 【史上最全面esp32教程】网络篇和tcp/ip的使用
  • Playwright的启动参数详情
  • GameFramework之Network网络模块Protobuf工具
  • Golang每日一练(leetDay0014)
  • [刷题]背包问题
  • 测试最新趋势——AI/ML,开源自动化框架,业务驱动
  • java基础面试题58道
  • GTC 2023的算力协奏曲,NVIDIA与宁畅“共舞”AI时代
  • 微信小程序自定义组件生命周期有哪些?
  • vue 项目 SEO 解决方案 - 预渲染
  • C++ 98/03 应该学习哪些知识10
  • 【Linux】基于阻塞队列的生产者消费者模型
  • Qt音视频开发28-ffmpeg解码本地摄像头(yuv422转yuv420)
  • 第27讲:Python前导字符串和后续字符串的去除
  • 数据结构绪论(2)
  • Python 封装(私有属性和私有方法)、继承(覆盖和扩展)、多态,类属性,类方法
  • Day14 文件操作
  • 0206旧版生命周期-组件-React
  • Docker常用指令
  • 【MySQL】MySQL表设计的经验(建议收藏)
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉