Python批量发送QQ邮件
哇奥,fantastic baby…今天 老Amy 开始薅头发~还有啥宝贝没给大家亮出来…
就开始看到繁忙的 hr ,我设身处地的想,如果行政部门需要批量的给不同人员发送不同信息的邮件~是怎么来做的呢?emmm…或许excel、word和邮箱都有快捷的功能[原谅我布吉岛],可是万一用python更便捷呢?所以 老Amy 就开动了!
需求如下
如下图,邮件.xlsx 文件中含有一些基本信息,而我们需要给不同的收件人邮箱发送对应的正文内容。
打BOSS第一版
最开始,我们不要把事情想的太复杂,而是先用 Python 实现给指定某一个人发送邮件。
并且,我觉得非常有必要介绍下SMTP,更有助于理解python发邮件的实现原理。SMTP协议属于TCP/IP协议簇,也就是简单邮件传输协议,它是一组用于由原地址到目的地址传送邮件的规则,由它来控制信件的中转方式,python实现发邮件也是基于此基础上进行封装的。
也就是对应的 smtplib 与 email 库。首先大家需注意,这两个库都是 python内置 的,所以并不需要去安装[老Amy还去安装了…结果一直报错…太丢人了]
其次大家需要稍微了解下各自对应的作用:
- email模块:主要负责构造邮件内容。
- 通过 email.mime.MIMEText 构造文本对象
- 通过 email.header.Header 构造标题对象
- smtplib模块:主要负责发送邮件。主要步骤如下
- 创建 SMTP 的操作对象并连接 SMTP 目标服务器,可以是163、QQ等
- 根据自己的账号登录目标服务器(自己的邮箱地址与邮件授权码)
- 调用对象的方法,发送邮件到目标地址
代码如下:
import smtplib # smtplib发送邮件
from email.mime.text import MIMEText # 构造文本内容
from email.header import Header # 构造标题内容# 设置服务器地址
mail_host = "smtp.qq.com"
# 设置服务器端口
mail_port = 465# 初始化发送方账号
sender = "28480*****@qq.com"
# 初始化接收方账号
receivers = "9152*****@qq.com"# QQ邮件登录账号
mail_user = "28480*****"
# QQ邮箱第三方授权码
mail_pass = "gwgcqikk********"def post_email(title,context):# 构造文本对象,三个参数:文本内容,设置文本格式,设置编码message = MIMEText(context,"plain","utf-8")# 文本对象 添加 发送者message["From"] = sender# 文本对象 添加 接收者message["To"] = receivers# 文本对象 添加 标题message["Subject"] = Header(title)# 创建 SMTP 对象,连接目标服务器smtpObj = smtplib.SMTP_SSL(mail_host,mail_port)# 自己账号登录smtpObj.login(mail_user,mail_pass)# 发送邮件到目标地址 注意:信息由MTMEText对象 转为 字符串对象smtpObj.sendmail(sender,receivers,message.as_string())# 结束 SMTP 对象smtpObj.quit()if __name__ == '__main__':post_email("至老妖怪的邮件", "老Amy,哪里逃!")
当然在这里大家需要注意一点,就是QQ的第三方授权码并不是你的QQ密码奥,而是需要开启第三方的SMTP,操作猛如虎的过程如下:
- 第一步:
- 第二步:
- 第三步:
打BOSS第二版
以上实现了发单条邮件的功能,那现在我们就需要实现同时发多条的功能了。嘻嘻~
既然接收方的数据信息以行为单位存储在 邮件.xlsx 里面,所以我们需要用 Python的库 来读取表格数据,为了方便我们仍然使用 pandas.read_excel() 来进行操作。该函数读取的数据返回为 DataFrame 的类型,并且我们还需要将 DataFrame 数据中的每一行为单位,传入到发送邮件的函数中去进行处理发送,所以接下来会使用到 DataFrame.apply(func) 去进行映射。
实现代码如下:
import smtplib # smtplib发送邮件
from email.mime.text import MIMEText # 构造文本内容
from email.header import Header # 构造标题内容# 设置服务器地址
mail_host = "smtp.qq.com"
# 设置服务器端口
mail_port = 465# 初始化发送方账号
sender = "28480*****@qq.com"# QQ邮件登录账号
mail_user = "28480*****"
# QQ邮箱第三方授权码
mail_pass = "gwgcqikk********"def post_email(per_info):# 构造文本对象,三个参数:文本内容,设置文本格式,设置编码message = MIMEText(per_info["正文"],"plain","utf-8")# 文本对象 添加 发送者message["From"] = sender# 文本对象 添加 接收者message["To"] = per_info["收件人邮箱"]# 文本对象 添加 标题message["Subject"] = Header(per_info["邮件主题"])# 创建 SMTP 对象,连接目标服务器smtpObj = smtplib.SMTP_SSL(mail_host,mail_port)# 自己账号登录smtpObj.login(mail_user,mail_pass)# 发送邮件到目标地址 注意:信息由MTMEText对象 转为 字符串对象smtpObj.sendmail(sender,per_info["收件人邮箱"],message.as_string())# 结束 SMTP 对象smtpObj.quit()if __name__ == '__main__':# 读取 邮件.xlsxemail_info_df = pd.read_excel("邮件.xlsx")# 使用apply方法 将email_info_df中每一行 映射到post_email函数中email_info_df.apply(post_email,axis=1)
得嘞,还是希望对大家有所帮助,当然这两个库的玩法不止如此,还可以发送图片文件等。这个就大家自己去拓展啦~加油!打工人。
如果还想解密python的其它玩法,欢迎关注公众号:极客夜读
Python批量发送QQ邮件相关推荐
- python批量发送工资条邮件
python批量发送工资条邮件 工资excel表格格式如下所示: 使用python批量给每位员工发送工资条信息,格式如下: 思路: 首先是加载excel,获取当前sheet表格 salay = loa ...
- 使用python+selenium发送QQ邮件
参考 : 初识selenium-发送QQ邮件 链接------>https://blog.csdn.net/qiye005/article/details/80259607 前言: 为实 ...
- 使用Python程序批量发送QQ邮件
项目文件下载 获取授权码:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256 项 ...
- Python 实现发送QQ邮件(可加附件)
东西比较简单,简单讲一下,直接贴代码了,其他邮箱都类似. 1.首先在qq 邮箱里面把stmp服务 打开 2.拉到下面,开启第一个,发送短信验证后会得到一个授权码: 3.代码,要注意的地方我都贴了注释: ...
- python发送QQ邮件报错:ssl.SSLError: [SSL: WRONG_VERSION_NUMBER]和smtplib.SMTPAuthenticationError(已解决)
用python代码发送qq邮件时,采用了以下服务器设置,结果报错: server = smtplib.SMTP_SSL('smtp.qq.com', 587) 报错信息为: ssl.SSLError: ...
- oracle 发的邮件qq,python基于SMTP发送QQ邮件
python基于SMTP发送QQ邮件,供大家参考,具体内容如下 第一步: 1.打开qq邮箱,开启smtp服务 2.验证密保 3.获取授权码 python代码里面使用 在Python中, smtplib ...
- 使用Python登录QQ邮箱发送QQ邮件
这真是黑科技啊,原来推送的广告邮件就是这样产生的.好人用来发节日贺卡,给女朋友纪念邮件:坏人会学着发广告,垃圾邮件.我希望大家能学会了做些有趣的有意义的事情. 今天我带大家实现下简单的发邮件功能.我们 ...
- python发送qq邮件(加密非加密)
python发送qq邮件,加密发送,非加密发送 设置qq邮箱 设置开启客户端功能 设置--->账户 开启POP3/SMTP服务 根据提示开启 授权码 开启成功 查看qq邮件服务器信息1 查看qq ...
- python3:利用SMTP协议发送QQ邮件+附件
转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...
最新文章
- 计算机网络_NAT与NAPT
- hdu 3635(并查集+路径压缩变形)
- verilog or VHDL出租车计价器电路设计
- python3.8.0安装_Python3.8.0
- 设置背景图时防止图片拉伸的解决方法
- javascript-DOM-节点
- struts2中常用Result类型(type)的用法
- hdu 1251(字典树)
- setactive隐藏之后无法显示_U盘里面有文件但是看不见无法显示文件的解决方法...
- TimeLine下载地址
- 01 你了解依赖倒置原则吗
- sklearn2onnx
- 506 Relative Ranks 相对排名
- 女生适合干【长期第一线编程工作】 男生能干的女生照样可以做的更好
- 如何给word文档方格打勾
- Java基础练习--猜数字游戏
- 记一次修改阿里云DNS解析问题
- 开源的.Net IDE :SharpDevelop
- VS异常:文件乱码:文件加载,使用Unicode(UTF-8)编码加载文件xxx时,有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。
- htpc派_您应该为HTPC使用PCI,USB或基于网络的电视调谐器吗?