Python邮件封装
Python邮件封装一、smtplib库是SMTP 简单邮件传输协议的操作模块发送邮件时起到服务器之间的通信作用。发送一封邮件分为设置服务器信息-编写邮件主体信息-进行登录发送发送一个文本邮件import smtplib from email.header import Header from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 设置服务器信息 mail_host smtp.qq.com mail_user 372109913 mail_pass 输入授权码 sender 372109913qq.com receivers [smilepassed163.com] # 编写邮件主体 message MIMEText(这是一个测试内容,plain,UTF-8) message[Subject] 一封来自测试的信 # 邮件标题 message[From] Header(Jie的QQ邮箱,utf-8) # 邮件主体中发送者名称 message[To] Header(Jie的163邮箱,utf-8) # 邮件主体中接收者名称 # 进行登录发送 try: smtpobj smtplib.SMTP() smtpobj.connect(mail_host,25) smtpobj.login(mail_user,mail_pass) smtpobj.sendmail(sender,receivers,message.as_string()) print(success) except Exception as e: print(ferror: {e}) finally: smtpobj.quit()1、设置服务器信息mail_host : SMTP 服务器主机mail_user邮箱登录账号mail_pass邮箱登录授权码sender发送邮件的邮箱地址receivers要接收邮件的地址是一个list即可实现群发邮件2、编写邮件主体MIMEText(这是一个测试内容,html,UTF-8) 邮件主体内容三个参数文本内容文本格式文本编码message[Subject] 邮件标题message[From] 邮件主体中发送者名称message[To]邮件主体中接收者名称3、进行登录发送smtplib.SMTP( )创建SMTP对象;通过connect( )连接SMTP服务器参数服务器地址端口号通过login( )进行登录参数用户名登录授权码sendmail 进行发送参数发送者邮箱接收邮箱列表邮件主体在发送方邮箱设置中需要打开POP3也是在这里获取登录的“授权码”发送一个带附件的邮件import smtplib from email.header import Header from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 设置服务器信息 mail_host smtp.qq.com mail_user 372109913 mail_pass 输入授权码 sender 372109913qq.com receivers [smilepassed163.com] # 编写邮件主体 message MIMEMultipart() # 生成包含多个部分的邮件主体对象 message[Subject] 一封来自测试的信 # 邮件主题 message[From] Header(Jie的QQ邮箱,utf-8) # 邮件主体中发送者名称 message[To] Header(Jie的163邮箱,utf-8) # 邮件主体中接收者名称 body MIMEText(正文文本内容,plain,utf-8) message.attach(body) att_body open(file_path, rb) # 以二进制的格式打开附件 att MIMEApplication(att_body.read()) # 导入附件 att_body.close() att.add_header(Content-Disposition,attachment,filenameallure测试报告.zip) message.attach(att) # 进行登录发送 try: smtpobj smtplib.SMTP() smtpobj.connect(mail_host,25) smtpobj.login(mail_user,mail_pass) smtpobj.sendmail(sender,receivers,message.as_string()) smtpobj.quit() print(success) except Exception as e: print(ferror: {e})1、创建 message MIMEMultipart() 对象用于构造带附件的邮件主体2、通过 body MIMEText(正文文本内容,plain,utf-8) 定义邮件主体的文本内容3、message.attach(body) 把文本内容添加到邮件主体中4、att MIMEApplication(open(file_path, rb).read()) 把要上传的附件以二进制打开读取后作为作为附件导入5、att.add_header(Content-Disposition,attachment,filenameallure测试报告.zip) 通过filename定义可下载的附件名6、message.attach(att) 把定义好的附件添加到message主体中邮件发送模块的封装import smtplib from email.header import Header from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication class SendEmail: # 初始化服务器信息 def __init__(self,mail_host, mail_user, mail_pass, sender, receives): self.mail_host mail_host self.mail_user mail_user self.mail_pass mail_pass self.sender sender self.receivers receives # 以文本的形式发送邮件 def make_email_by_text(self,context, subject, from_address, to_address): message MIMEText(context, plain, UTF-8) message[Subject] subject # 邮件标题 message[From] Header(from_address, utf-8) # 邮件主体中发送者名称 message[To] Header(to_address, utf-8) # 邮件主体中接收者名称 self.send_email(message) # 以文本和附件的形式发送邮件 def make_email_by_att(self,file_path,subject, from_address, to_address): message MIMEMultipart() message[Subject] subject # 邮件标题 message[From] Header(from_address, utf-8) # 邮件主体中发送者名称 message[To] Header(to_address, utf-8) # 邮件主体中接收者名称 body MIMEText(dear all: 测试报告详情请查看附件,plain,utf-8) message.attach(body) att_body open(file_path, rb) # 以二进制的格式打开附件 att MIMEApplication(att_body.read()) # 导入附件 att_body.close() att.add_header(Content-Disposition,attachment,filenameallure测试报告.pdf) # 添加附件名称 message.attach(att) self.send_email(message) # 登录并进行发送 def send_email(self,message): # 进行登录发送 try: smtpobj smtplib.SMTP() smtpobj.connect(self.mail_host,25) smtpobj.login(self.mail_user,self.mail_pass) smtpobj.sendmail(self.sender,self.receivers,message.as_string()) smtpobj.quit() print(success) except Exception as e: print(ferror: {e}) raise e if __name__ __main__: pass

相关新闻

从教学到实战:共享单车大数据项目的数据仓库架构与Hive/Spark实践

从教学到实战:共享单车大数据项目的数据仓库架构与Hive/Spark实践

1. 项目缘起:从“头歌”平台到真实数据世界的桥梁如果你正在学习大数据,尤其是通过“头歌”这类在线实践平台,你可能会发现一个普遍现象:平台上的实验环境、数据集和任务流程都经过了高度抽象和简化。这当然有助于初学者快速上手核…

2026/10/9 11:25:50 阅读更多 →
想靠网络安全吃饭,这些攻防工具与实战案例必须精通

想靠网络安全吃饭,这些攻防工具与实战案例必须精通

红蓝对抗视角下的全栈能力构建在网络安全职场中,岗位职能通常被划分为“红队”与“蓝队”。红队侧重于模拟攻击,通过渗透测试、漏洞挖掘来检验系统的防御短板;蓝队则聚焦于防御运营,负责安全监控、应急响应及体系加固。然而&#…

2026/10/3 7:05:20 阅读更多 →
Ubuntu分区方案全解析:从新手一键安装到高级定制指南

Ubuntu分区方案全解析:从新手一键安装到高级定制指南

1. 从一块“白板”硬盘到可用的系统:为什么分区是绕不开的第一步 刚拿到一台新电脑,或者准备给旧电脑重装Ubuntu时,很多人会直接点“下一步”,让安装程序自动处理分区。这当然省事,但就像装修房子时让施工队全权决定房…

2026/10/3 8:57:35 阅读更多 →

最新新闻

同步发电机突然三相短路暂态过程Simulink仿真实现与分析

同步发电机突然三相短路暂态过程Simulink仿真实现与分析

同步发电机的突然三相短路,基本上每个学电机和电力系统的人都绕不过去。教材里那一串用暂态电抗、次暂态电抗、时间常数堆出来的公式,推导过程极其劝退,算出来的冲击电流倍数也让人没什么实感。前阵子我刚好用Simulink把同步发电机突然三相短…

2026/10/13 21:32:27 阅读更多 →
CATIA V5基础教程:界面认知与鼠标中键、指南针操作详解

CATIA V5基础教程:界面认知与鼠标中键、指南针操作详解

简介:CATIA基础教程基本操作PPT学习教案是一份面向CATIA V5初学者的入门教学课件,重点解决新手不熟悉界面布局、不掌握基本交互的问题。课件从工作界面认知入手,系统讲解菜单栏的常见菜单分类、公共工具栏(视图、图形属性、测量&a…

2026/10/13 21:32:27 阅读更多 →
同步发电机突然三相短路Simulink仿真与暂态波形解读

同步发电机突然三相短路Simulink仿真与暂态波形解读

同步发电机突然三相短路,是电力系统教科书里反复强调的重头戏,也是每个电气工程专业学生绕不过去的坎。很多人把理论背得滚瓜烂熟,但一问他短路电流里为什么有直流分量、次暂态和暂态到底怎么从波形上看出来,就支支吾吾了。这篇内…

2026/10/13 21:32:27 阅读更多 →
Codex新模型接入指南:解决模型选择与配置不生效问题

Codex新模型接入指南:解决模型选择与配置不生效问题

最近遇到一个特别典型的问题:某个新发布的大模型,在官方网站和聊天界面里用得挺欢,但只要换到 Codex 这种命令行编程工具里,要么报model not found,要么始终在用旧的 Base 模型,新模型的上下文窗口和推理能…

2026/10/13 21:32:27 阅读更多 →
VLC时钟控制原理与毫秒级音视频同步实战

VLC时钟控制原理与毫秒级音视频同步实战

1. 项目概述:这不是调时间,是给视频流装上“精准节拍器”“vlc时钟控制”——这五个字在普通用户眼里可能只是“VLC播放器里那个不起眼的设置项”,但在音视频处理、直播推流、多机同步、教育录播、工业视觉检测等真实场景中,它本质…

2026/10/13 21:32:27 阅读更多 →
Qt MinGW 编译 PCL 全家桶:Boost/Eigen/FLANN/Qhull/VTK 完整指南

Qt MinGW 编译 PCL 全家桶:Boost/Eigen/FLANN/Qhull/VTK 完整指南

简介:本资源面向需要在Windows平台使用Qt与MinGW工具链构建三维点云应用的C开发者,提供PCL点云库及其全套依赖的编译成果。PCL专注三维点云采集、预处理、特征提取与表面重建,Qt负责跨平台图形界面,MinGW提供原生Windows编译工具链…

2026/10/13 21:31:26 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →