如何利用 Python 自动发邮件,打工人福音

article/2025/10/4 21:37:13

在工作中,每天或者每周结束的时候我们都会发送相应的日报或者周报给上级领导,来汇报你做了那些工作,可是汇报工作内容的时候我们始终都是打开邮箱、写入内容,发送和抄送给固定的人,那么这么繁琐并且重复的一件事,我们能不能使用程序来简化?

答案是可以的,接下来我们就使用Python来操作邮箱,自动的进行邮件的发送操作。

Python中有两个内置的库:smtplib和email, 这两个库结合使用就可以实现,其中smtplib库负责通信(发送邮件),email库负责构造邮件的内容和格式。

那么接下来我们先来看下发送邮件的思路。

一、发送邮件思路

发送一封邮件大概的思路为:登录、写邮件、发送, 但是每一步也包含了很多过程,接下来我们慢慢看。

登录: 我们要用程序通过邮箱服务器地址连通邮箱服务器,然后借用SMTP协议通过用户名和授权码进行登录。

写邮件: 需要构造邮箱的发件人、收件人、邮件主题、邮件内容(文本、附件)等。

发送: 借助连通好的服务器和登录好的账号,在SMTP协议上,通过收件人地址进行邮件发送。

SMTP协议

SMTP 的全称是Simple Mail Transfer Protocol,即简单邮件传输协议。

它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

二、代码编写

(1)先导入smtplib库,进行账号登录(在此以QQ邮箱为例)。

下面会用到一个叫做授权码的东西,相当于你账号的密码,但是此处不能写密码,要去邮箱中获取对应的授权码(下方提供了教程),获取到的授权码保存好,防止泄露,并且请把邮箱服务开启。
在这里插入图片描述

image.png

import smtplib # 发件人邮箱地址 
sendAddress = 'xxx@qq.com' 
# 发件人授权码 
password = 'xxxxxxxx' 
# 连接服务器 
server = smtplib.SMTP_SSL('smtp.qq.com', 465) 
# 登录邮箱 
loginResult = server.login(sendAddress, password) 
print(loginResult)

上方代码正确执行结果应该是(235, b'Authentication successful'),状态码235表示认证成功。

注意:

连接服务器表示登录哪家的邮箱账号就连接哪家的服务器进行认证,下面列举部分邮箱服务器地址,发送邮件就写465端口号。

邮箱服务器
新浪邮箱smtp.sina.com
搜狐邮箱smtp.sohu.com
126邮箱smtp.126.com
QQ邮箱smtp.qq.com
163邮箱smtp.163.com

(2)接下来导入email库,用于构造邮件内容,邮件内容包括发件人、收件人、抄送人、主题、正文、附件等。

image.png

先介绍下MIMEMultipartMIMEText等方法,这是邮件消息构造对象,用来将一封邮件的各个部分组成一条消息,MIMEMultipartMIMEText**组合可以同时给邮件添加正文和附件,如果不需要添加附件只需要使用MIMEText简单来说,上述方法用于规范邮件。

注意电子邮件的形式,我们一般会把发件人、收件人、抄送人写成昵称<邮箱地址>的形式,如果有多个发件人、收件人、抄送人,使用分号;隔开,邮件正文要在创建邮件消息对象的时候以子内容的身份添加进去,同时要指定子内容类型和编码类型,子内容类型默认为'plain',编码类型默认为'us-ascii',但是我们可以根据发送邮件内容不同将内容类型编码类型进行修改。

构造一封没有附件的邮件:

from email.mime.text import MIMEText# 正文
content = """
尊敬的用户您好:
附件中为您申请的个人乘机凭证,请查收。手机查看可能出现乱码现象,请您在电脑上查看即可。
使用航旅纵横“验真服务-行程单验真”功能可以扫描凭证中的二维码检验信息。如有任何建议与意见,欢迎通过APP中的意见反馈与我们交流,谢谢您的使用。
"""
# 定义一个可以添加正文的邮件消息对象
msg = MIMEText(content, 'plain', 'utf-8')# 发件人昵称和地址
msg['From'] = 'xxx<xxx@qq.com>'
# 收件人昵称和地址
msg['To'] = 'xxx<xxx@qq.com>;xxx<xxx@qq.com>'
# 抄送人昵称和地址
msg['Cc'] = 'xxx<xxx@qq.com>;xxx<xxx@qq.com>'
# 邮件主题
msg['Subject'] = 'xxxxxx'

构造一封带有附件的邮件:

在下方代码中,我将添加附件时MIMEText中的'plain'换成了'base64',这是因为MIMEText规范化的内容类型不同,要使用与之对应的参数。

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart# 定义一个可以添加正文和附件的邮件消息对象
msg = MIMEMultipart()
# 发件人昵称和地址
msg['From'] = 'xxx<xxx@qq.com>'
# 收件人昵称和地址
msg['To'] = 'xxx<xxx@qq.com>;xxx<xxx@qq.com>'
# 抄送人昵称和地址
msg['Cc'] = 'xxx<xxx@qq.com>;xxx<xxx@qq.com>'
# 邮件主题
msg['Subject'] = 'xxxxxx'
# 正文
content = """
尊敬的用户您好:
附件中为您申请的个人乘机凭证,请查收。手机查看可能出现乱码现象,请您在电脑上查看即可。
使用航旅纵横“验真服务-行程单验真”功能可以扫描凭证中的二维码检验信息。如有任何建议与意见,欢迎通过APP中的意见反馈与我们交流,谢谢您的使用。
"""
# 先通过MIMEText将正文规范化,构造成邮件的一部分,再添加到邮件消息对象中
msg.attach(MIMEText(content, 'plain', 'utf-8'))# 附件(添加多个附件同理)
# 以二进制形式将文件的数据读出,再使用MIMEText进行规范化
attachment = MIMEText(open('跑车.jpg', 'rb').read(), 'base64', 'utf-8')
# 告知浏览器或邮件服务器这是字节流,浏览器处理字节流的默认方式为下载
attachment['Content-Type'] = 'application/octet-stream'
# 此部分主要是告知浏览器或邮件服务器这是一个附件,名字叫做xxxxx,
# 这个文件名不要用中文,不同邮箱对中文的对待形式不同
attachment['Content-Disposition'] = 'attachment;filename="car.jpg"'
msg.attach(attachment)

(3)邮件构造完成,可以发送邮件,使用最开始连通的服务器调用sendmail方法。sendemail(from_addr, to_addrs, msg.as_string())

from_addr:发件人邮箱地址;

to_addrs:收件人邮箱地址,可以传入存放了多个收件人地址的列表;

msg:发送的消息。

server.sendmail(sendAddress,['xxx@qq.com'],msg.as_string())
print('发送成功')

注意: 邮件内容不规范会被邮箱服务器拦截,发送失败。

详情请根据报错原因查看此链接https://service.mail.qq.com/cgi-bin/help?id=20022。


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

相关文章

用Excel和OutLook实现自动批量发邮件

转自&#xff1a;https://zhuanlan.zhihu.com/p/25283201 作者&#xff1a;闲者秋山 闲者秋山 闲者秋山 相信不少人的工作中都有这样的情况&#xff0c;需要群发通知邮件的情况。 &#xff08;比如财务付完款&#xff0c;要通知供应商&#xff0c;房东之类的&#xff09; 但如…

JAVA实现自动发送邮件

JAVA实现发送邮件 做项目时用到的小工具 做个备份&#xff08; tips: 需要导入javax.mail 我使用了maven导入X <!-- JavaMail相关依赖 --><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><ver…

自动发送

自动发送 主要用于普通邮箱&#xff08;个人邮箱/企业邮箱&#xff09;群发&#xff0c;用户使用“群发单显”或“精准分发”生成邮件在“待发邮件”邮件夹中&#xff0c;开启自动发送&#xff0c;可按照设定的时间和速度进行邮件的自动发送。 最新功能&#xff08;版本&#x…

python---自动群发邮件

生活中我们经常发送邮件&#xff0c;那么我们能不能用Python写一个自动发送邮件的功能呢&#xff1f;答案是肯定的&#xff01;&#xff01;&#xff01; 开始实现功能之前我们需要开启我们邮箱的 IMAP/SMTP功能&#xff0c;我们先了解一下什么是IMAP/SMTP。 SMTP 的全称是“…

Python之邮箱自动发件

在使用python给好友发送邮件时&#xff0c;首先需要下载python中在对模块&#xff0c;以及打开邮箱IMAP/SMTP服务。接下来一步一步介绍读者如何来使用并实现发件。 1.下载python中在对模块 首先键盘点击winR键&#xff0c;输入pip search smtplib便可以看到smtplib模块下含有…

使用Python自动发送邮件

发送普通邮件 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;是简单传输协议。 python中对SMTP进行了简单的封装&#xff0c;可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下&#xff1a; email模块&#xff1a;负责构建邮件 smtplib模块&am…

通过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库负责构造邮件格式和内容。 邮件发…