Django框架之邮件系统,涉及HTML、富文本、附件邮件发送

news2024/11/18 3:35:13

参考

(892条消息) Django框架之邮件系统,涉及HTML、富文本、附件邮件发送_django邮件系统_李恩泽的技术博客的博客-CSDN博客icon-default.png?t=N5K3https://blog.csdn.net/heroiclee/article/details/121406488

发送设置(settings.py)

EMAIL_USE_SSL = True # Secure Sockets Layer 安全套接层, 取决于邮件服务器是否开启加密协议
EMAIL_HOST = 'smtp.qq.com'  # 邮件服务器地址
EMAIL_PORT = 465 # 邮件服务器端口 
EMAIL_HOST_USER = 'account@qq.com' # 登陆邮件服务器的账号
EMAIL_HOST_PASSWORD = 'password'  # 登陆邮件服务器的密码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER # 邮件的发送者

发送文本邮件

发送普通邮件可以使用django.core.mail模块下的send_mail函数进行

函数介绍 

send_mail(subject, message, from_email, recipient_list, fail_silently=False, html_message=None)
# 将邮件发送至`recipient_list`中的每一个收件人处
'''
subject: 发送邮件标题
message: 发送邮件正文
from_email: 发件人邮箱地址
recipient_list: 一个字符串列表,每一个数据为接收者的邮箱地址
html_message: 如果指定该值,则发送的内容类型为text/html为一个html邮件内容
''

发送普通邮件视图函数

from django.core.mail import send_mail
def send_email(request):
    subject = '邮件测试'
    message = '<a href="http://www.python.org">学习Python,我很快乐</a>'
    send_mail(
        subject = subject,
        message = message,
        from_email = 'from@qq.com',
        recipient_list = ['recv@qq.com','recv1@qq.com']
    )
    return HttpResponse('Down')

发送HTML邮件

函数介绍

这里发送的邮件内容为一个HTMLa标签,但是真正接收者接到该邮件时,a标签并不会解释称为真正的a标签,只是一个普通的字符串,这是因为当前发送邮件的类型为text/plain,可以使用html_message参数进行HTML内容的发送

from django.core.mail import send_mail
def send_email(request):    
    subject = '邮件测试'
    message = '<a href="http://www.python.org">学习Python,我很快乐</a>'
    send_mail(
        subject = subject,
        message = '', # 该参数为必须参数,必须填写
        html_message = message,
        from_email = 'from@qq.com',
        recipient_list =['recv@qq.com','recv1@qq.com']
    )
    return HttpResponse('Down')

 发送html格式邮件还可以使用django.core.mail模块下的EmailMultiAlternatives类进行邮件体的构造,然后进行邮件发送

EmailMultiAlternatives(subject='', body='', from_email=None, to=None)
'''
subject: 邮件标题
body: 邮件内容
from_email: 邮件发送者
to: 邮件接收人列表
'''
EmailMultiAlternatives.attach_alternative(content, mimetype)
# 向EmailMultiAlternatives实例中添加mimetype支持的邮件内容
'''
content: 添加的邮件内容
mimetype: 添加内容的mime类型
''
EmailMultiAlternatives.send()
# 发送邮件

示例

from django.core.mail import EmailMultiAlternatives
def send_email(request):
    subject = '邮件测试'
    text_message = '学习Python,我很快乐'
    html_message = '<a href="http://www.python.org">学习Python,我很快乐</a>'
    email = EmailMultiAlternatives(
        subject = subject,
        body = text_message,
        from_email = '1747266529@qq.com',
        to = ['recv@qq.com','recv1@qq.com']
    )
    email.attach_alternative(html_message,'text/html') # 添加HTML邮件部分
    email.send() # 发送邮件
    return HttpResponse('Down')

发送富文本邮件

经常需要我们在邮件中加入图片等静态资源

需要用到python中email.mime.image模块下的MIMEImage类进行图片内容的构造

这里发送邮件使用EmailMessage类,来自于django.core.mail模块下;再使用对应该类实例的attach添加图片资源数据,最后使用实例的send函数发送邮件
 

 函数介绍

EmailMessage(subject='', body='', from_email=None, to=None)
'''
subject: 邮件标题
body: 邮件内容
from_email: 邮件发送者
to: 邮件接收人列表
'''
 

EmailMessage(subject='', body='', from_email=None, to=None)
'''
subject: 邮件标题
body: 邮件内容
from_email: 邮件发送者
to: 邮件接收人列表
'''

 示例

from sendmailpro.settings import STATICFILES_DIRS
import os
from email.mime.image import MIMEImage
from django.core.mail import EmailMessage
def send_email(request):
    subject = '图片邮件测试'
    file_1 = os.path.join(STATICFILES_DIRS[0],'img/1.png')
    with open(file_1, 'rb') as fp: 
        # 打开第一张图片
        image_1 = MIMEImage(fp.read())
        
    file_2 = os.path.join(STATICFILES_DIRS[0],'img/2.png')
    with open(file_2, 'rb') as fp: 
        # 打开第二张图片
        image_2 = MIMEImage(fp.read())
        
    body = "<img src='cid:first_id'><br><img src='cid:sec_id'>"
    # 发送邮件主体内容
    
	image_1.add_header('Content-ID','<%s>' % 'first_id') 
    # 通过 CID 对称图片在邮件内容中的位置
    image_2.add_header('Content-ID','<%s>' % 'sec_id')
    
    message = EmailMessage( # 构建发送的邮件主体
                subject=subject,
                body=body,
                from_email='from@qq.com',
                to=['recv@qq.com','recv1@qq.com']
            )
    message.content_subtype = 'html'
    message.attach(image_1) # 添加两张图片
    message.attach(image_2)
    message.send() # 发送邮件
    return HttpResponse('Down')

发送附件邮件

发送附件,可以使用django.core.mail模块下的EmailMessage类进行附件邮件体构造

通过EmailMessage实例的attach|attach_file两种函数在邮件主体中添加附件内容

attach_file添加邮件附件直接加入路径即可,但是attach添加附件内容需要提供附件内容
 

函数介绍

attach(filename=None, content=None, mimetype=None)
# 添加附件内容
'''
filename: 附件文件名称
content: 附件内容
mimetype: 附件的`MIME`类型
'''
attach_file(path, mimetype=None)
# 直接通过路径添加附件
'''
path: 附件路径
mimetype: 附件的MIME类型
'''

示例

from sendmailpro.settings import STATICFILES_DIRS
import os
from email.mime.image import MIMEImage
from django.core.mail import EmailMessage
def send_email(request):
    subject = '附件邮件测试'
    email = EmailMessage(
        subject=subject,
        body='这是一封具有图片附件的邮件',
        from_email='from@qq.com',
        to=['recv@qq.com','recv1@qq.com']
    )
    file_1 = os.path.join(STATICFILES_DIRS[0],'img/1.png')
    image_1 = open(file_1,'rb').read()
    email.attach('1.png',image_1,'image/png') # 使用attach实例函数添加附件内容

    file_2 = os.path.join(STATICFILES_DIRS[0],'img/2.png')
    email.attach_file(file_2,mimetype='image/png') # 使用attach_file实例函数添加附件路径

    email.send()
    return HttpResponse('Down')

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

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

相关文章

通俗易懂讲解CPU、GPU、FPGA的特点

1. CPU vs GPU 大家可以简单的将CPU理解为学识渊博的教授&#xff0c;什么都精通&#xff1b;而GPU则是一堆小学生&#xff0c;只会简单的算数运算。可即使教授再神通广大&#xff0c;也不能一秒钟内计算出500次加减法。因此&#xff0c;对简单重复的计算来说&#xff0c;单单一…

畅聊职场之:作为程序员,不可不知道的银行IT岗位,收藏备选。

程序员向往的银行IT岗 1、引言2、国有商业银行2.1 中国农业银行2.2 中国邮政银行2.3 中国工商银行2.4 中国银行2.5 中国建设银行2.6 中国交通银行 3、股份制商业银行3.1 招商银行3.2 浙商银行3.3 浦发银行3.4 平安银行3.5 渤海银行3.6 中国民生银行3.7 中信银行3.8 中国光大银行…

60 KVM Skylark虚拟机混部-安装和配置

文章目录 60 KVM Skylark虚拟机混部-安装和配置60.1 安装Skylark60.1.1 硬件要求60.1.2 软件要求60.1.3 安装方法 60.2 配置Skylark60.2.1 日志60.2.2 功耗干扰控制60.2.3 LLC/MB干扰控制 60 KVM Skylark虚拟机混部-安装和配置 60.1 安装Skylark 60.1.1 硬件要求 处理器架构…

教你手把手使用 MyBatis 框架

目录 MyBatis 是什么&#xff1f; 配置 MyBatis 开发环境 方法一&#xff1a;创建项目时添加依赖 方法二&#xff1a;创建项目后添加依赖 配置连接字符串 配置 MyBatis 中的 XML 路径 业务代码 添加实体类 添加 Service 添加 Controller 增加&#xff0c;删除和修改…

Spring Boot 中的 @Configuration 注解

Spring Boot 中的 Configuration 注解 在 Spring Boot 中&#xff0c;我们经常使用注解来简化代码&#xff0c;提高效率。其中&#xff0c;Configuration 注解是一个非常重要的注解&#xff0c;它用于声明一个类作为 Spring 应用程序上下文的配置类。 在本文中&#xff0c;我…

CentOS-8 - AppStream 错误:为 repo ‘AppStream‘ 下载元数据失败

刚安装的 CentOS8 系统执行yum命令报错 CentOS-8 - AppStream 为 repo AppStream 下载元数据失败 错误&#xff1a;为 repo AppStream 下载元数据失败 原因&#xff1a;系统默认的yum源的问题…

MySQL MHA 单主架构 主从切换 高可用

MHA (Master High AvailabilityManager and tools for MySQL) 目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它是由日本人youshimaton采用Perl语言编写的一个脚本管理工具。目前MHA主要支持一主多从的架构&#xff0c;要搭建MHA,要求一个复制集群必须最少有3台数…

基于java+swing+mysql选课管理系统V2.0

基于javaswingmysql选课管理系统V2.0 一、系统介绍二、功能展示1.项目骨架2.项目内容3.登陆4.注册界面5、主界面6、添加选课8、修改选课 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java SE项目&#xff08;GUI图形界面&#xff09; 项目名称&…

深入浅出设计模式 - 桥接模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

68、基于51单片机语音识别控制小车行走系统设计(程序+原理图+PCB源文件+参考论文+开题报告+任务书+元器件清单等)

摘 要 随着电子工业的发展&#xff0c;具有语音控制功能的小车越来越受到人们的青睐&#xff0c;在人们的日常消费生活中起着不可忽视的作用。目前&#xff0c;声控技术已在很多领域得到使用。 本文对语音控制功能的小车概况做了阐述。在硬件设计方面&#xff0c;本论文以凌阳…

【Java高级语法】(二十)数学运算类:全面讲解Java数学计算的高级类库,BigDecimal、Math、Random、DecimalFormat...~

Java高级语法详解之数学运算类 1️⃣ 概念&#x1f50d; 数学运算类汇总 2️⃣ 优势和缺点3️⃣ 使用3.1 各数学计算支持类使用案例3.2 Math类解析3.3 BigDecimal类解析3.4 Random类解析3.5 DecimalFormat类解析 4️⃣ 应用场景5️⃣ 使用技巧&#x1f33e; 总结&#x1f4d1; …

ssm校园防疫管理系统-计算机毕设 附源码80315

ssm校园防疫管理系统 摘 要 2019年12月19号中国武汉发生第一例新冠病毒的到来&#xff0c;大家都在听从政府的号召在居家隔离&#xff0c;不管是在城市还是在乡镇、农村&#xff0c;这引起我的注目&#xff0c;设计一套大学ssm校园防疫管理系统&#xff0c;疫情防疫需要大家共同…

配置了git config --global credential.helper store后,还是弹出输入密码框

使用http协议拉取代码时,每次pull/push都会弹出账号密码框,可以使用git的配置credential.helper来保存每次输入的账号密码到硬盘上,命令git config --global credential.helper store,store表示存到硬盘中,但是按照这样操作后git pull还是弹出密码框,通过git config --list发现…

ESP32(MicroPython) WS2812 RGB流水灯 新版

ESP32&#xff08;MicroPython&#xff09; RGB流水灯 新版 本程序相比上一个程序&#xff0c;改用了24灯的环形WS2812模块&#xff0c;数据引脚改用13脚。增加了把相应颜色重复2次&#xff08;即前半部分和后半部分的灯颜色排列相同&#xff09;和4次的模式&#xff0c;模式增…

关于element-ui form表单必填项已经选入值并回填了,但是还会报错必填提示

哈喽 大家好啊 今天用el-form表单的时候 发现明明已经选入值并回填了 发现还是会触发必填报错 如图所示&#xff1a; 因为我这里是点击后右边是一个select选项帮助 然后点击确认后回填 经过发现&#xff0c;是因为rule表单触发校验规则 receiverName: [{ required: true, t…

HiveSQL之datediff、date_add、date_sub详解及注意坑点

文章目录 datediff介绍&#xff1a;示例1&#xff1a;正常情况示例2&#xff1a;负值情况注意&#xff1a;使用场景示例总结 date_add介绍&#xff1a; date_sub介绍&#xff1a; 注意&#xff1a; datediff 介绍&#xff1a; datediff语法: datediff(string enddate,string …

2023上半年Java高频面试题库总结(600+java面试真题含答案解析)

不知什么时候起&#xff0c;互联网行业掀起一股寒冬之风&#xff0c;到处都给人一种岌岌可危的寒颤之感&#xff0c;总觉得是要见不到明日的太阳一般&#xff0c;细细想来&#xff0c;最近的行业内的各种状况确实让不少人有此担忧。 从我认识的好几个程序员口中了解到&#xff…

8.0、Java_IO流 - 如何利用缓冲区提高读写效率 ?

8.0、Java_IO流 - 如何利用缓冲区提高读写效率 &#xff1f; 简单介绍&#xff1a; FileInputStream 通过字节的方式读取文件&#xff0c;适合读取所有类型的文件&#xff08;图像、视频、文本文件等&#xff09;&#xff1b;Java 也提供了 FileReader 字符流 专门读取文本文件…

linux系统之lvm方式挂载磁盘

目录 一、简介二、创建LVM三、删除 一、简介 LVM&#xff1a;逻辑卷管理(Logical Volume Manager) 它是Linux环境下对磁盘分区进行管理的一种机制。LVM是建立在硬盘和分区之上的一个逻辑层&#xff0c;来提高磁盘分区管理的灵活性。它由ibm公司提出。目的&#xff1a;在原始设…

简单认识Nginx配置块location及rewrite

文章目录 一、location配置块1、分类2、location 常用的匹配规则3、location 优先级&#xff1a;4.location 匹配流程5、location实际使用规则1、直接匹配网站根目录首页2、处理静态文件请求3、通用规则 二、rewrite配置块1、简介2、rewrite跳转实现3、rewrite 执行顺序4.rewri…