利用Python自动发送邮件

article/2025/10/4 23:11:34

自动发送邮件

我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助Python来自动发送邮件。

使用邮箱的第一步

一般我们在使用QQ邮箱、163邮箱、126邮箱等这些比较常用的邮箱时,只需要输入账号和密码就可以。但是在使用手机端的企业邮箱的时候,一般都需要配置一下,常规的配置界面如下所示:

6zyR39.png

就是除了在输入账号密码以外,还需要输入一个服务器链接地址,这个地址每个公司都会不太一样。

一份邮件的组成

下图是outlook中发送一份邮件的界面,主要包含发件人、收件人、抄送人、主题、正文、附件这几部分。这也是一般邮件比较通用的组成部分。

6zyWcR.png

如何发送邮件

在发送邮件之前首先需要与服务器进行连接,在Python中主要利用smtplib模块来建立服务器连接接、服务器断开的工作。

不同邮箱的服务器链接地址不一样,大家根据自己使用的邮箱设置相应的服务器链接。下表为常见邮箱对应的服务器链接:

邮箱服务器地址
新浪邮箱smtp.sina.com
搜狐邮箱smtp.sohu.com
126邮箱smtp.126.com
139邮箱smtp.139.com
163网易邮箱smtp.163.com

在与163邮箱服务器进行连接之前,需要先登陆自己的163邮箱进行授权设置,授权码设置如下:

点击设置中的POP3/SMTP/IMAP,勾选SMTP服务,根据提是进行授权码设置,设置授权成功后,在Python中利用授权码进行登陆,而不是你本来的邮箱密码,如果使用本来的邮箱密码登陆,会报错。

连接设置好以后就可以使用账户密码进行登录了,登录成功以后就可以对邮件内容进行编辑,编辑完成以后就可以点击发送了,发送完成后断开服务器链接。

如下展示了发送一份邮件的简短流程代码:

import smtplibsmtp = smtplib.SMTP()
smtp.connect(host, port)  # 与服务器进行连接
smtp.set_debuglevel(1) #显示出交互信息
smtp.login(username, password)  # 登陆邮箱
smtp.sendmail(sender, receiver, msg.as_string())  # 发送邮件
smtp.quit()  # 断开连接

正式发送一份邮件

如下以163邮箱为例,展示了发送一份邮件完整的Python代码:

import smtplib
from email.mime.multipart import MIMEMultipart 
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.mime.application import MIMEApplication#发件人邮箱
asender="zhangjunhongdata@163.com"
#收件人邮箱
areceiver="zhangjunhong@163.com"
#抄送人邮箱
acc = 'zhangjunhong@qq.com'
#邮件主题
asubject = '这是一份测试邮件'  #发件人地址
from_addr = "zhangjunhongdata@163.com"
#邮箱密码(授权码)
password="123data"#邮件设置
msg = MIMEMultipart()
msg['Subject'] = asubject  
msg['to'] = areceiver  
msg['Cc'] = acc 
msg['from'] =  "张俊红"#邮件正文
body = "你好,这是一份测试邮件"#添加邮件正文:
msg.attach(MIMEText(body, 'plain', 'utf-8'))#添加附件
#注意这里的文件路径是斜杠
xlsxpart = MIMEApplication(open('C:/Users/zhangjunhong/Desktop/这是附件.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='这是附件.xlsx')
msg.attach(xlsxpart)    #设置邮箱服务器地址以及端口
smtp_server ="smtp.163.com"
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)#登陆邮箱
server.login(from_addr, password)#发送邮件
server.sendmail(from_addr, areceiver.split(',')+acc.split(','), msg.as_string())#断开服务器链接
server.quit()

最后的结果如下图:

关于自动发送邮件还有一些进阶的内容,比如定时发送,正文显示html内容等,大家有兴趣的可以自行上网搜索学习。

批量发送邮件

如果是需要同时发送多份邮件,可以把收件人整理成一个表格进行循环遍历,挨个进行发送。

比如我们现在需要给销售部门好几百销售人员分别发送本月各自的销售任务,在发送邮件的时候主题需要命名成xxx任务明细,在正文中的称呼也需要改成对应的收件人,附件中需要添加各自的任务明细表,而且需要抄送给各自的直属上级。

根据上述的需要,我们整理了如下收件人信息相关的表格df:

姓名收件人抄送人
张俊红1zhangjunhong11@163.comzhangjunhong@163.com
张俊红2zhangjunhong22@163.comzhangjunhong@163.com

只需要写一个for循环去遍历这个df表格中的信息,然后就可以分别发送出去,具体实现代码如下:

import smtplib
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplicationhost = "smtp.163.com"
port = 25
username = "zhangjunhong1227@163.com"
password = "123zjh"smtp = smtplib.SMTP() #声明一个链接对象
smtp.connect(host, port)  # 与服务器进行连接
smtp.set_debuglevel(1) #显示出交互信息
smtp.login(username, password)  # 登陆邮箱sender = usernamefor i in zip(df["姓名"],df["收件人"],df["抄送人"]):receiver = i[1] #收件人acc = i[2] #抄送人msg = MIMEMultipart() #声明一个邮件对象msg['from'] = username #发件人msg['to'] = receiver#收件人msg['Cc'] = acc #抄送人msg['Subject'] = i[0] + "任务明细" #主题# 编写正文text = MIMEText(i[0]+"您好,这是您这个月的任务明细",'plain', 'utf-8') msg.attach(text)# 添加表格附件f = open('C:/Users/zhangjunhong/Desktop/任务明细/'+ i[0] + '.xlsx', 'rb').read()filepart = MIMEApplication(f)filepart.add_header('Content-Disposition','attachment',filename=i[0] + '任务明细.xlsx') #为附件添加一个标题msg.attach(filepart)smtp.sendmail(sender, receiver.split(',') + acc.split(','), msg.as_string())  # 发送邮件
smtp.quit()  # 断开连接    

通过运行上面的代码,就可以达到一次性给表格df中的所有人发送邮件的需求。


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

相关文章

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

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

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

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

Python实现自动发送邮件

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

python自动发送邮件实现

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

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

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

【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

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