使用Python自动发送邮件

article/2025/10/4 23:25:51

  发送普通邮件

 SMTP(Simple Mail Transfer Protocol)是简单传输协议。

python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下:

email模块:负责构建邮件

smtplib模块:负责发送邮件

常用方法与属性: 

 如果要使用qq邮箱发送的话,需要在qq邮箱设置-账户里面开启POP3/SMTP服务

 首次开启需要你用手机号发送短信,照着做就好了,做完之后会给你一个授权码,记着这个授权码,写代码需要用到,忘记了也可以找回

接着编写代码,发送普通邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Headerdef send_email():# 设置要登录的邮箱smtp_obj = smtplib.SMTP('smtp.qq.com')# 登录邮箱  这里需要填写你的qq邮箱地址和生成的授权码smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 编辑内容mail_text = 'This is Email~ 您要的邮件来啦~~'# plain 原生文本模式msg_body = MIMEText(mail_text,'plain','utf-8')# 设置从哪发送的msg_body['From'] = Header('xxx','utf-8')  # 设置发送人msg_body['Subject'] = Header('测试Python自动邮件','utf-8')  # 设置内容主题# 发送邮件  这里第一个邮箱填自己的,第二个填收件人的邮箱地址smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())if __name__ =='__main__':send_email()

发送HTML邮件

 发送HTML邮件只需要把发送的内容换成html代码即可

import smtplib
from email.mime.text import MIMEText
from email.header import Headerdef send_email():# 设置要登录的邮箱smtp_obj = smtplib.SMTP('smtp.qq.com')# 登录邮箱  这里需要填写你的qq邮箱地址和生成的授权码smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 编辑内容mail_text = '''<h1 style='color:red'>这是一个HTML邮件通知</h1><p>这个是邮件的内容</p><p><a href='http://www.itbaizhan.cn'>这个是链接</a></p>'''# plain 原生文本模式msg_body = MIMEText(mail_text,'plain','utf-8')# 设置从哪发送的msg_body['From'] = Header('xxx','utf-8')  # 设置发送人msg_body['Subject'] = Header('测试Python自动邮件','utf-8')  # 设置内容主题# 发送邮件  这里第一个邮箱填自己的,第二个填收件人的邮箱地址smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())if __name__ =='__main__':send_email()

发送附件邮件-smtplib

有时邮件的内容只靠文本是无法完全描述内容。这时就可以考虑发 送附件来携带内容。具体方法如下:

设置登录服务器 、登录邮箱、增加附件 、设置请求头、 发送邮件

import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Headerdef send_file_email():# 设置邮箱服务器stmp_obj = smtplib.SMTP('smtp.qq.com')# 登录邮箱stmp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 设置邮件内容# 文本msg_txt = MIMEText('这个带有附件的邮件','plain','utf-8')# 附件  打开你要发送的文件msg_file = MIMEApplication(open('./base_data/backg.jpg','rb').read())msg_file.add_header('Content-Disposition','attachment',filename='bg.jpg')# 封装要发送的数据part = MIMEMultipart()part.attach(msg_txt)part.attach(msg_file)# 设置邮件其它信息part['From'] = Header('xx','utf-8')part['Subject'] = Header('附件邮件','utf-8')# 发送邮件stmp_obj.sendmail('xxx@qq.com','hotelmail@126.com',part.as_string())if __name__ =='__main__':send_file_email()

批量发送邮件-smtplib

这里以发送工资条为例

工资数据如下: 

from email.header import Header
from email.mime.text import MIMEText
import smtplibfrom openpyxl import load_workbookdef send_many_mail():# 设置登录邮箱服务器smtp_obj = smtplib.SMTP('smtp.qq.com')# 登录邮箱smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 打开excel文件wb = load_workbook('./base_data/工资数据.xlsx',data_only=True)# 激活工作簿sh = wb.active# 读取数据-遍历for i,r in enumerate(sh.iter_rows()):if i != 0:# 编辑内容msg_txt = f'''<h3>您好:{r[1].value}</h3><p>请查收2030年12月工资条详情:</p><table border="1"><tr><td>工号</td><td>姓名</td><td>部门</td><td>基本工资</td><td>提成</td><td>加班工资</td><td>社保扣除</td><td>考勤扣除</td><td>应发工资</td><td>邮箱</td></tr><tr><td>{r[0].value}</td><td>{r[1].value}</td><td>{r[2].value}</td><td>{r[3].value}</td><td>{r[4].value}</td><td>{r[5].value}</td><td>{r[6].value}</td><td>{r[7].value}</td><td>{r[8].value}</td><td>{r[9].value}</td></tr></table>'''msg =  MIMEText(msg_txt,'html','utf-8')# 设置邮件其他信息msg['From'] = Header('财务部','utf-8')msg['Subject'] = Header('工资条','utf-8')#发送邮件smtp_obj.sendmail('xxx@qq.com',{r[9].value},msg.as_string())print(f'{r[1].value} 工资条发送成功!!')
if __name__ =='__main__':send_many_mail()

发送邮件-zmail

 Zmail的优势

1 自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)

2 将一个字典映射为email,构造信件就像构造字典一样简单

3 自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)

安装:pip install zmail

发送的消息以字典发送,包含的key:

subject 邮件主题

from 发送人

content_text 邮件内容-文本

content_html 邮件内容-HTML

attachments 邮件内容-附件,可写多个 

import zmail
def send_text():# 登录邮箱server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')# 编写内容info = {'from':'笨笨的张小白','subject':'测试zmail模块','content_text':'这个是zmail邮件信息'}# 发送邮件server.send_mail('hotelmail@126.com',info)
def send_html():# 登录邮箱server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')# 编写内容info = {'from':笨笨的张小白','subject':'测试zmail模块','content_html':'<h1>这个是zmail邮件信息</h1>'}# 发送邮件server.send_mail('hotelmail@126.com',info)
def send_file():# 登录邮箱server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')# 编写内容info = {'from':'笨笨的张小白','subject':'测试zmail模块','content_html':'<h1>这个是zmail邮件信息</h1>','attachments':[r'.\base_data\backg.jpg']}# 发送邮件server.send_mail('hotelmail@126.com',info)
def get_email():# 登录邮箱server = zmail.server('xxx@qq.com','tzteewnmyfqacbce')email = server.get_latest()print(email.get('subject'))print(email.get('from'))print(email.get('content_html'))print(email.get('content_text'))if __name__ == '__main__':# send_text()# send_html()# send_file()get_email()


http://chatgpt.dhexx.cn/article/0jVNB75P.shtml

相关文章

通过SMTP协议自动发送邮件

通过SMTP协议实现训练结束自动发送邮件 为了更安心地摸鱼&#xff0c;想让大模型训练完之后自己发邮件给我。 开启SMTP服务与取得授权码 1.打开设置->账户->打开服务 然后会获得授权码 代码示例 #!/usr/bin/python\# -*- coding: utf-8 -*-import smtplib from e…

Java实现邮件自动发送

有时候我们会遇到自动发送邮件通知、邮件验证码、节假日祝福邮件发送、邮件自动发送广告功能&#xff0c;今天我们就谈谈邮件自动发送是怎么实现的。案例使用Java语言来编写&#xff0c;使用springBoot来搭建项目。 步骤一&#xff1a;添加邮件依赖&#xff1a;spring-boot-st…

sql自动发邮件功能

用SQL自动发邮件需要三步 1&#xff0c;做一个配置文件 2&#xff0c;调用存储过程msdb.dbo.sp_send_dbmail 3, 创建作业 1&#xff0c; 右键->【配置数据库邮件】 配置好了之后可以测试能否发送邮件 进去邮箱查看是否收到邮件或者数据库查询 select * from msdb.dbo.sys…

自动定时发送邮件的方法 —— 定时执行专家V6.8

目录 ▉ 定时发送简单邮件 ◆前提条件 ◆实现思路 ◆设置方法 ▉ 定时执行专家简介 ◆最新版下载链接 ◆2023-03-21 V6.8 - 更新日志 ▉ 定时发送简单邮件 ◆前提条件 - 电脑安装邮件客户端&#xff0c;使用这个邮件客户端&#xff0c;发送简单邮件。 ◆实现思路 组…

自动化发送邮件

自动化发送邮件 自动化发送邮件 背景SMTP了解一下邮件系统实现过程 1.连接建立2.邮件传输3.连接释放4.注意项目 信息格式MIME新增关键字multipart自动发邮件 构建过程 封装代码必要的设置 背景 室友选修的《机器学习》&#xff0c;结课作业是对8万的数据进行分析。他向我抱怨…

利用Python自动发送邮件

自动发送邮件 我们把报表做出来以后一般都是需要发给别人查看&#xff0c;对于一些每天需要发的报表或者是需要一次发送多份的报表&#xff0c;这个时候可以考虑借助Python来自动发送邮件。 使用邮箱的第一步 一般我们在使用QQ邮箱、163邮箱、126邮箱等这些比较常用的邮箱时…

Java实现发送邮件(定时自动发送邮件)

系列文章目录 Redis缓存穿透、击穿、雪崩问题及解决方法Spring Cache的使用–快速上手篇分页查询–Java项目实战篇全局异常处理–Java实战项目篇 该系列文章持续更新&#xff0c;更多的文章请点击我的主页查看哦&#xff01; 文章目录 目录 系列文章目录 文章目录 前言 一…

使用Excel和OutLook实现自动发送邮件

参考我的资源: https://download.csdn.net/download/paul50060049/11805973 问题的产生 我们在平时工作中可能会遇到要批量发送邮件的工作&#xff0c;例如财务部根据每个人的工资情况发放工资条到个人的邮箱&#xff0c;因为邮件因人而异&#xff0c;所以需要完成大量而细致…

Python实现自动发送邮件

最近比较闲的慌&#xff0c;在自己学习Python爬虫&#xff0c;学到了用Python发送邮件&#xff0c;觉得这个可能以后比较实用。以下项目用QQ邮箱为例。 需要用到的模块&#xff1a; smtplib&#xff0c;email 提醒&#xff01;QQ 邮箱一般默认关闭SMTP服务&#xff0c;我们得…

python自动发送邮件实现

目录 1 前言2 准备工作2.1 电子邮件的基础知识。2.2 python邮件库2.3 邮箱设置 3 python实现邮件自动发送3.1 SMTP()和send()方法介绍3.2 python实现实例 参考信息 1 前言 python功能强大&#xff0c;可以实现我们日常办公的很多任务。诸如批量处理word,excel,pdf等等文件&…

Python自动化小技巧14——自动批量发送邮件(带各种附件)

案例背景 我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的&#xff0c;每次输入评论者的邮箱&#xff0c;然后打开数据所在的文件夹&#xff0c;上传&#xff0c;填写标题正文&#xff0c;发送....... 一模一样的流程&#xff0c;所以这种重复性的劳动肯定…

【Python 】20行代码,实现自动发送邮件

快下班了&#xff0c;今天给大家分享一下&#xff0c;平常我都是怎么发送电子邮件&#xff0c;这个方法能够帮助大家提高工作效率、&#xff0c;摆脱繁重的重复性工作。一般我都会借用Python来实现自动化邮件发送&#xff0c;相信你用过这个方法之后就会爱上它。&#xff08;资…

Python 自动发送邮件实战案例,人人都可以学会

自动发送邮件能应用于许多场景&#xff0c;比如我想要知道股票策略中的股票池是否有实时的更新&#xff0c;这时候如果再拉一遍数据&#xff0c;跑一遍脚本&#xff0c;实在是太浪费时间了。为什么不把这一套流程放到服务器上&#xff0c;然后到点自动运行并发送邮件呢&#xf…

干货 | 解放双手,用Python实现自动发送邮件

使用Python实现自动化邮件发送&#xff0c;可以让你摆脱繁琐的重复性业务&#xff0c;节省非常多的时间。 Python有两个内置库&#xff1a;smtplib和email&#xff0c;能够实现邮件功能&#xff0c;smtplib库负责发送邮件&#xff0c;email库负责构造邮件格式和内容。 邮件发…

小区物业管理系统设计与开发论文

目录 第1章 需求规格说明书... 1 1.1 目的... 1 1.2 系统概述... 1 1.3 系统总体功能描述... 1 1.4 运行环境... 2 1.5 系统角色分工... 2 1.5.1xxx模块功能描述.. 4 1.5.2 xxx模块功能描述.. 5 1.5.3 xxx模块功能描述... 5 1.5.4 xxx模块功能描述... 6 第2章 系统设计说明书..…

基于安卓 android studio的考试APP开发设计 前台和后台管理系统

一 项目概述 考试APP系统分为前台APP端和后台管理系统&#xff0c;前台APP可以注册&#xff0c;登录&#xff0c;试卷列表&#xff0c;开始测试&#xff0c;个人中心&#xff0c;试卷打分&#xff0c;试题解析&#xff0c;退出系统&#xff0c;后台管理系统 主要有 老师注册 登…

产品开发的组织架构和开发管理

摘要&#xff1a;产品开发的组织架构和产品开发过程管理是一个软件企业开发管理的两个侧面&#xff0c;开发组织架构指软件项目的立项和项目开发有效的人员调配和组织&#xff0c;开发过程管理指在项目确定后&#xff0c;软件开发过程的管理。本文根据作者在建立软件企业管理体…

图书馆管理系统的开发

课程设计的目的与要求 课程设计目的软件工程课程设计是学习软件工程课程后所进行的实践环节,目的是培养学生用工程化的思想和标准文档化的思想进行软件开发。本次课程设计通过开发一个小型实用的软件系统,亲身体验软件生命周期中的各个环节,以加深对软件工程课程的深入理解、…

微信小程序 一键授权 给第三方平台代开发管理(一,创建第三方平台)

不是重点&#xff0c;可以忽略&#xff1a; 本人 七月的胜利。代表七月份我出生啦&#xff0c;嘻嘻 博客就是平常记录一些常用到的开发常用到的技术&#xff0c;方法等&#xff0c;看见好东西了就自己整理一下防止以后自己遇到了再找不到。 如果有幸帮到你&#xff0c;欢迎点赞…