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

article/2025/10/5 0:52:37

案例背景

我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的,每次输入评论者的邮箱,然后打开数据所在的文件夹,上传,填写标题正文,发送.......

一模一样的流程,所以这种重复性的劳动肯定要用Python来解决了。


准备

这次代码主要依赖email库,这个库应该不用下载,Python自带。

当然想要你的邮箱能被代码运行,首先你得准备配置一下你的邮箱。

例如QQ邮箱,打开设置:

然后找到账户页面下的SMTP服务

 

把pop3/SMTP这个服务打开。

当然还需要手机短信验证啥的,不过应该不难。

开了服务后会得到一个类似于密码一样的一串字母,这是授权码,在代码里面你得输入才能登陆到邮箱上去。


 代码实现

这里导包,然后输入自己的邮箱,要发的人的邮箱,可以是列表,就实现了群发:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication 
from email.header import Header
fromaddr = '22********@qq.com'
password = '********'
toaddrs = ['2717*****6@qq.com', '22******61@qq.com']
content = '可以的麻烦点赞关注一下,谢谢啦.'
textApart = MIMEText(content)
k=7kind_d={1:'二手车',2:'网飞影视',3:'天气聚类',4:'经济增长',5:'外卖文本分类',6:'文本十分类',7:'泰坦尼克号'}
kind=kind_d[k]

我把我的邮箱和密码都*号打码了 ,要用的输入你们自己的邮箱(fromaddr)和授权码(password),还有接受目标的邮箱(toaddrs)就行。

content是邮件正文,字符串,可以自己改。

至于下面的k=7,kind_d字典,  kind,这是我用来选择发哪些附件的变量选择....有的人评价要二手车数据,有的评论要网飞影视数据.....我赋值k就改变了kind,然后对kind进行条件判断,来选择我要发送的附件:

if kind=='二手车':File = 'D:\\AAA最近要用\\数学建模\\21MathorCup挑战杯\\2021年MathorCup大数据竞赛赛道A\\附件\\附件1:估价训练数据.txt'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='附件1:估价训练数据.txt')File1 = 'D:\AAA最近要用\\数学建模\\21MathorCup挑战杯\\2021年MathorCup大数据竞赛赛道A\\附件\\附件2:估价验证数据.txt'Apart1 = MIMEApplication(open(File1, 'rb').read())Apart1.add_header('Content-Disposition', 'attachment', filename='附件2:估价验证数据.txt')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m.attach(Apart1)m['Subject'] = kindelif kind=='网飞影视':File = 'D:\\AAA最近要用\\接单项目\\网飞电影\\netflix_titles.csv'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='netflix_titles.csv')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m['Subject'] = kindelif kind=='天气聚类':File = 'D:\\AAA最近要用\\接单项目\\天气\\天气数据.zip'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='天气数据.zip')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m['Subject'] = kind
elif kind=='经济增长':File = 'D:\\AAA最近要用\\接单项目\\00熟人\\姜珮瑶经济增长\\实证\\data.xlsx'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='data.xlsx')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m['Subject'] = kind
elif kind=='外卖文本分类':File = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\外卖.xlsx'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='外卖.xlsx')File1 = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\stopwords.txt'Apart1 = MIMEApplication(open(File1, 'rb').read())Apart1.add_header('Content-Disposition', 'attachment', filename='stopwords.txt')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m.attach(Apart1)m['Subject'] = kind
elif kind=='文本十分类':File = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\十分类文本.xlsx'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='十分类文本.xlsx')File1 = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\stopwords.txt'Apart1 = MIMEApplication(open(File1, 'rb').read())Apart1.add_header('Content-Disposition', 'attachment', filename='stopwords.txt')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m.attach(Apart1)m['Subject'] = kind
elif kind=='泰坦尼克号':File = 'D:\\AAA最近要用\\kaggle\\泰坦尼克号\\train.csv'Apart = MIMEApplication(open(File, 'rb').read())Apart.add_header('Content-Disposition', 'attachment', filename='train.csv')File1 = 'D:\\AAA最近要用\\kaggle\\泰坦尼克号\\test.csv'Apart1 = MIMEApplication(open(File1, 'rb').read())Apart1.add_header('Content-Disposition', 'attachment', filename='test.csv')m = MIMEMultipart()m.attach(textApart)m.attach(Apart)m.attach(Apart1)m['Subject'] = kind

当然如果你不需要判断发什么附件就直接拿出一段用就行。

要加很多附件可以写循环。

File是文件路径,后面用MIMEApplication读取,然后生成MIMEMultipart类命名为m,后面再对m添加正文,附件。

无论什么类型的附件(常用的txt,xlsx,docx,压缩包等)都可以,在File里面给出它的绝对路径就行。

然后再对m添加发送人,接收人,成功了就打印,没成功就打印报错信息。

m['From'] = Header(fromaddr)
m['To'] = Header(",".join(toaddrs))
try:server = smtplib.SMTP('smtp.qq.com')server.login(fromaddr,password)server.sendmail(fromaddr, toaddrs, m.as_string())print('success')server.quit()
except smtplib.SMTPException as e:print('error:',e) 

然后就完成了这个脚本编写。

以后我输入收件人邮箱和我要发送的附件编号,就能自动发邮件了。给各位评价要数据的同学们更加迅速的服务~


http://chatgpt.dhexx.cn/article/RxyGaSIB.shtml

相关文章

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

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

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

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

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

使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间。 Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,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端和后台管理系统,前台APP可以注册,登录,试卷列表,开始测试,个人中心,试卷打分,试题解析,退出系统,后台管理系统 主要有 老师注册 登…

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

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

图书馆管理系统的开发

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

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

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

使用go语言开发运维管理平台

前言 经过对go语言的一段时间学习,打算实践一下,正好公司缺个运维平台,于是我就对Zeus二次开发,完成了一个初步的效果,在这里分享给大家,大家有什么建议可以提出来哈,一起进步 采用技术 前端&am…

微信小程序云开发实践--搭建一个管理小程序

概述 : 开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即…

基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者没有积分想获取项目,欢迎指教: 企鹅:869192208 文章目录 一、开发背景二、 需求分析三、开发环境四、运行效果五、开发流程工程目…

用Django半天时间开发一个员工管理系统实例教程分享

熟悉python的朋友都知道,django简直是web开发领域的一个大杀器。 请求、模板、ORM、admin 都自带,程序员可以很轻松的开发出一个网站或者管理系统。 今天小编给大家分享一个超简单的员工管理系统 源码地址: https://github.com/newpanjin…

微信小程序云开发-内容管理系统(CMS)小案例

一、前言 最近有朋友问到如何在CMS上实现审核小程序端提交的数据,例如发布的内容审核,订单审核等等。因而出一篇小案例。 二、原理说明 这个由腾讯开源的这个内容管理系统,实际上就是对于云开发数据库的可视化操作(又或者说其实…

使用微信提供的云开发实现后端 微信小程序云开发的内容管理CMS

以前开发一款小程序或者应用啥的,首先就是申请域名租服务器,这是必不可少的步骤。 现在小程序云开发出来后,又再出现内容管理的这个功能,对于开发一款简单的小程序来说,真的是太简单的了。 现成的后台直接配置&#…

新能力 | 云开发CMS内容管理系统,5分钟搞定小程序管理后台

小程序云开发的云调用能力,让用户可以免鉴权快速调用微信的开放能力,极大节约了开发成本。现在,大家期待已久的云开发 CMS 内容管理系统,终于上线啦!顺便提示,接下来还可以二次开发哦! 云开发 …

[敏捷开发]研发管理 开发过程管理

开发过程管理,主要面向开发人员的管理。其核心目的,是通过一个项目管理软件,来管理不同项目,然后通过项目的里的工作项,了解开发人员的工作量,效率,从而来管理开发人员,合理调配开发…

Arduino常用的附加开发版管理器网址

20211004更新 增加ESP32 常用的附加开发版管理器网址 ESP32 https://dl.espressif.com/dl/package_esp32_index.json 如果使用ESP32-SOLO要用这里的编译文件替换源文件 https://github.com/lbernstone/arduino-esp32-solo 替换位置 C:\Users\你的用户名\AppData\Local\Ar…

基于vue的后台管理系统开发

如果要快速开发一套基于vue的后台管理系统,你可以手动从0到1动手撸,也可以基于现有的vue的后台管理系统模版进行开发。 github上有几套关注度比较的vue后台管理系统模版[1]: vue-element-admin[2]vue-admin[3]vue-manage-system[4]iview-admi…

微信小程序 —— 成员管理及开发管理

引入 要理解微信小程序的成员管理,首先要理解微信小程序的注册。 微信小程序的注册需要用户提供一个邮箱作为登录账号,并绑定一个微信号作为管理员。登录账号会得到一个官方提供的appid作为标识码,作为登录账号的凭证。微信小程序登录账号与…