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

news2024/12/24 20:32:52

案例背景

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

一模一样的流程,所以这种重复性的劳动肯定要用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=7

kind_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'] = kind

elif 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'] = kind

elif 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://www.coloradmin.cn/o/190174.html

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

相关文章

Linux下 git 上传与删除 的基本指令

git的概述克隆仓库使用 git 上传文件删除 git 中的文件git的概述 Git 是一个免费并开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 在使用 git 应确保Linux系统中已安装有git 命令:git --version 作用:查看 git 是否…

Spring Boot 单元测试

文章目录1. 单元测试是什么2. 单元测试的优点3. 进行 Spring Boot 单元测试3.1 确认项目中已经内置了测试框架3.2 生成单元测试的类3.3 添加 SpringBootTest 注解3.4 添加单元测试的业务代码3.5 注解 Transactional4. 断言1. 单元测试是什么 单元测试,是指对软件中…

微信小程序022同学会学生会活动经费系统

同学会小程序采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员端和用户端两部分,管理员管理主要功能包括:首页、个人中心、用户管理、共享账本管理、我的账本管理、经费信息管理、经费支出管理、活动信息、管理员管理、留言板管理…

分享怎么做公众号预约_美容院预约小程序开发制作功能介绍

小程序的功能首先是为美人有约客户提供更快选购、预约服务的线上工具,解决顾客对商品详情、线上购买、线上预约查看等各种服务需求。一、美容美发预约下单小程序主要功能有:首页:搜索、banner、金刚区、瓷片区、项目列表预约:单次…

Java技术栈,从入门到放弃,废了废了

Java技术路线应用框架后端Spring家族SpringIoCAOPSpring MVCSpring Boot自动配置、开箱即用整合Web整合数据库(事务问题)整合权限ShiroSpring Security整合中间件缓存MQRPC框架NIO框架服务器软件应用服务器TomcatJettyUndertowWeb服务器Nginx中间件缓存R…

Deathstalker的核心武器——Janicab新变种

01 概述 DeathStalker是一个专门针对金融机构和律师事务所进行攻击的组织,而Janicab是其所使用的比较古老的武器。 Janicab 首次在2013年被发现,它是能够运行在MacOS和Windows操作系统上的恶意软件。其中,Windows版本基于VBscript的植入作为…

【第27天】SQL进阶-查询优化- performance_schema系列实战三:锁问题排查(表级锁)(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是表级锁二、什么时候适合加表级锁三、实战演练3.1 数据准备(如果已有数据可跳过此操作)3.2 开启第一个会话,执行显式加表级锁3.3 开启第二个会话,对该表执行update更新3.4 …

Vue 3.0 应用组件实例

#创建一个应用实例 每个 Vue 应用都是通过用 createApp 函数创建一个新的应用实例开始的: const app Vue.createApp({ /* 选项 */ }) 该应用实例是用来在应用中注册“全局”组件的。我们将在后面的指南中详细讨论,简单的例子: const app V…

jsp学生管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 学生管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发,数据库为Mysql,使用ja…

【Docker】基础使用

目录 一、Docker简介 二、Docker核心概念 三、Docker安装 四、Docker常用操作 1. 镜像操作 2. 容器操作 3. 安装MySQL 一、Docker简介 Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖…

基于Springboot搭建java项目(二十二)——过滤器、监听器和拦截器的使用

过滤器、监听器和拦截器的使用 一、过滤器、监听器和拦截器总览 过滤器(Filter)监听器(Listener)拦截器(Interceptor)关注点web请求系统级别参数、对象Action(部分web请求)如何实现…

20230201在AIO-3568J开发板在原厂Android11下增加右键返回

20230201在AIO-3568J开发板在原厂Android11下增加右键返回 2023/2/1 8:37 百度搜索:RK3568 右键返回 Z:\rk3568_Android11.0_ap6257s\frameworks\native\services\inputflinger\reader\mapper\accumulator\CursorButtonAccumulator.cpp uint32_t CursorButtonAccumu…

【学习OpenCV4】如何学习OpenCV

OpenCV是应用非常广泛的开源视觉处理库,在图像处理、计算机视觉和自动驾驶中有着非常重要的作用。 废话不多说,我就来讲讲OpenCV的使用和学习需要怎么做吧,大家觉得有道理的可以参考一下。 我理解的学习和使用的重点在四个方面: …

PTA L1-019 谁先倒(详解)

前言:本期是关于谁先倒的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗? 题目: 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方…

多模态搜索的未来:超越关键字和向量的混合搜索!

二十年前,“混合”一词仅在植物学和化学领域使用。如今,“混合”这个概念在搜索领域一片繁荣,许多搜索系统都在推出基于 AI 技术的混合搜索方案。但是,“混合搜索”是真的具有应用价值,还只是流行的一阵风呢&#xff1…

深度学习:Self-Attention与Multi-heads Attention详解

深度学习:Self-Attention与Multi-heads Attention详解IntroductionSelf - AttentionMulti-Head AttentionPosition- EncodingIntroduction Transformer 最初是由 Ashish Vaswani等人提出的一种用以完成机器翻译的 Seq2Seq 学习任务的全新网络结构,它完全…

nginx学习笔记9(小滴课堂)

业界主流高可用方案Linux虚拟服务器 LVS讲解 这部分因为需要多台虚拟机,所以我先不实操。 Keepalived核心配置讲解 echo "" > keepalived.conf是清空文件中的内容。 从机的优先级可以写的比master的优先级低一些。 准备NginxLvsKeepAlive相关软件环境 …

什么是最大子数组问题?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注! 作者| 慕课网精英讲师 JdreamZhang 最大子数组(Max Subarray)问题,是计算机科学与技术领域中一种常见的算法问题&#…

CVE-2022-26135 Atlassian Jira Mobile Plugin SSRF漏洞分析

漏洞描述 6月29日,Atlassian官方发布安全公告,在Atlassian Jira 多款产品中存在服务端请求伪造漏洞(SSRF),经过身份验证的远程攻击者可通过向Jira Core REST API发送特制请求,从而伪造服务端发起请求,从而导致敏感信息…

【青训营】规则引擎概述和入门

本文内容总结自 字节跳动青年训练营 第五届后端组 一、规则引擎是什么 规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并且使用预定义语义模块编写业务决策。接受数据输入,解释业务规则,并且…