哇奥,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邮件相关推荐

  1. python批量发送工资条邮件

    python批量发送工资条邮件 工资excel表格格式如下所示: 使用python批量给每位员工发送工资条信息,格式如下: 思路: 首先是加载excel,获取当前sheet表格 salay = loa ...

  2. 使用python+selenium发送QQ邮件

    参考 :    初识selenium-发送QQ邮件  链接------>https://blog.csdn.net/qiye005/article/details/80259607 前言: 为实 ...

  3. 使用Python程序批量发送QQ邮件

    项目文件下载 获取授权码:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256 项 ...

  4. Python 实现发送QQ邮件(可加附件)

    东西比较简单,简单讲一下,直接贴代码了,其他邮箱都类似. 1.首先在qq 邮箱里面把stmp服务 打开 2.拉到下面,开启第一个,发送短信验证后会得到一个授权码: 3.代码,要注意的地方我都贴了注释: ...

  5. python发送QQ邮件报错:ssl.SSLError: [SSL: WRONG_VERSION_NUMBER]和smtplib.SMTPAuthenticationError(已解决)

    用python代码发送qq邮件时,采用了以下服务器设置,结果报错: server = smtplib.SMTP_SSL('smtp.qq.com', 587) 报错信息为: ssl.SSLError: ...

  6. oracle 发的邮件qq,python基于SMTP发送QQ邮件

    python基于SMTP发送QQ邮件,供大家参考,具体内容如下 第一步: 1.打开qq邮箱,开启smtp服务 2.验证密保 3.获取授权码 python代码里面使用 在Python中, smtplib ...

  7. 使用Python登录QQ邮箱发送QQ邮件

    这真是黑科技啊,原来推送的广告邮件就是这样产生的.好人用来发节日贺卡,给女朋友纪念邮件:坏人会学着发广告,垃圾邮件.我希望大家能学会了做些有趣的有意义的事情. 今天我带大家实现下简单的发邮件功能.我们 ...

  8. python发送qq邮件(加密非加密)

    python发送qq邮件,加密发送,非加密发送 设置qq邮箱 设置开启客户端功能 设置--->账户 开启POP3/SMTP服务 根据提示开启 授权码 开启成功 查看qq邮件服务器信息1 查看qq ...

  9. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

最新文章

  1. 计算机网络_NAT与NAPT
  2. hdu 3635(并查集+路径压缩变形)
  3. verilog or VHDL出租车计价器电路设计
  4. python3.8.0安装_Python3.8.0
  5. 设置背景图时防止图片拉伸的解决方法
  6. javascript-DOM-节点
  7. struts2中常用Result类型(type)的用法
  8. hdu 1251(字典树)
  9. setactive隐藏之后无法显示_U盘里面有文件但是看不见无法显示文件的解决方法...
  10. TimeLine下载地址
  11. 01 你了解依赖倒置原则吗
  12. sklearn2onnx
  13. 506 Relative Ranks 相对排名
  14. 女生适合干【长期第一线编程工作】 男生能干的女生照样可以做的更好
  15. 如何给word文档方格打勾
  16. Java基础练习--猜数字游戏
  17. 记一次修改阿里云DNS解析问题
  18. 开源的.Net IDE :SharpDevelop
  19. VS异常:文件乱码:文件加载,使用Unicode(UTF-8)编码加载文件xxx时,有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。
  20. htpc派_您应该为HTPC使用PCI,USB或基于网络的电视调谐器吗?

热门文章

  1. C语言 心理阴影面积
  2. 胃病三分治七分养,拿什么来养?做到这3件小事
  3. 【vue】vue的常用指令及用法总结(续)_03
  4. java对比图片_Java实现图片比对-逐像素对比
  5. MySQL安装及应用合集(3):msi安裝包的安装方式
  6. TypeScript基本类型总结
  7. win7系统下以管理员运行cmd窗口
  8. rock pi s 操作外设
  9. MCU, SOC 区别
  10. Linux,shell脚本编程-图书管理系统