查看原文
其他

自动群发邮件--email和smtplib基本模块的使用

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:赵冰洁,中南财经政法大学金融学院

本文编辑:石   艳

技术总编:张馨月

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!
在日常生活中,我们经常需要通过邮件进行信息的传送,但当收件人过多时,逐个发送邮件就会显得十分的繁琐且浪费时间。那么,为了节省时间并实现方便快捷的目的,Python 就为我们提供了自动发送邮件的小工具---即 smtplib 模块和 email 模块。
基本模块的简要介绍

1、email模块

一封邮件的完成需要有固定的格式信息:发件人、收件人、主题、内容等,Python 中的 email 模块可以帮助我们来构建一封邮件的基本内容。我们在使用 Python 自动群发邮件时,主要运用 email 模块下的 email.mime 模块来处理邮件信息,具体如下:
1from email import encoders
2from email.mime.base import MIMEBase
3from email.mime.multipart import MIMEMultipart
4from email.mime.text import MIMEText
5from email.mime.image import MIMEImage
6from email.mime.application import MIMEApplication


  • email.mime.base.MIMEBase:这是 email.mime 模块中所有子类的一个基类,通常情况下不需要在使用时创建具体的 MIMEBase 的实例。

  • email.mime.multipart.MIMEMultipart:该子类是多个 MIME 对象的一个集合,其将邮件的发件人、收件人、主题、内容、图片、附件等对象整合在一起,代表的是一封完整的邮件。

  • email.mime.text.MIMEText:该子类表示的是一封邮件的文本内容,我们可以通过构造MIMEText对象来完成邮件文本内容的填充。

  • email.mime.image.MIMEImage:在程序中可以通过构造一个 MIMEImage 对象来为邮件添加图片。

  • email.mime.application.MIMEApplication:该子类表示为邮件添加附件,在我们需要自动发送带附件的邮件时,需要引入该子类。

2、smtplib模块

smtplib 模块主要是负责完成邮件的发送。首先,我们先简单地了解一下 SMTP 协议。SMTP 协议,即简单邮件传输协议,是一组用于由源地址到目标地址传送电子邮件的规则,由它来控制邮件的中转方式,Python 自动发送邮件正是在此基础上实现的。
在利用 smtplib 模块发送邮件时,我们主要引用以下几种具体对象来实现:
  • SMTP.connect(host) :连接指定的 SMTP 服务器

  • SMTP.ehlo(host):向 SMTP 服务器标识自己的身份

  • SMTP.login(user, password) :根据所获取的授权码登录 SMTP 服务器

  • SMTP.sendmail(sender, to, msg):发送邮件。其中,第三个参数 msg 是一个字符串,代表的是整封邮件

  • SMTP.quit():断开与 SMTP 服务器的连接

我们使用 smtplib 模块来完成邮件的自动发送主要有一下几个步骤:
  • 创建对应的 SMTP 对象并连接相应的 SMTP 服务器(163、qq等)

  • 登录 SMTP 服务器

  • 调用 smtplib 模块中的具体对象,发送邮件到目标邮箱

在连接目标服务器之前,我们需要获得相应的服务器授权码,以qq邮箱为例,具体过程如下:

(1)登录邮箱,点击设置

(2)点击账户,打开 SMTP 服务

(3)在新弹出的验证密保窗口,根据指示进行操作以获取相应的邮箱授权码

实例展示

1、文本邮件的发送

首先,导入对应模块。
1# 准备邮件 email模块
2from email import encoders
3from email.mime.multipart import MIMEMultipart  ## 发送人、接收人、主题
4from email.mime.text import MIMEText ## 邮件的内容
5from email.mime.image import MIMEImage ## 图片
6from email.mime.application import MIMEApplication ## 添加附件
7from email.mime.base import MIMEBase
8
9# 发送邮件 smtplib模块
10import smtplib
其次,准备邮件的相关参数。
1sender = "10******90@qq.com" ## 发件人的邮箱
2receiver = "10******90qq.com" ## 收件人的邮箱
3subject = "爬虫俱乐部" ## 邮件主题
4password = "n**************j" ## 服务器授权码,用于连接邮箱服务器
然后,创建一封邮件。
1# 邮件基本格式信息
2msg = MIMEMultipart() ## 设置email信息
3msg["subject"] = subject ## 邮件主题
4msg["From"] = sender ## 发件人信息
5msg["To"] = receiver ## 收件人信息
6
7# 邮件正文信息
8msg_content = f''' 
9您好:
10    非常感谢您在百忙之中阅读本邮件!在此祝您身体健康,工作顺利!本邮件来自微信公众号“Stata & Python数据分析”(原“爬虫俱乐部”)。
11
12                                                                                                                Stata&Python数据分析
13                                                                                                                        2021年1月01日
14'''

15
16# 将邮件正文信息与基本格式信息整合
17msg.attach(MIMEText(msg_content))
最后,发送邮件。
1# 连接 SMTP 服务器
2s = smtplib.SMTP()
3s.connect("smtp.qq.com")
4# 登录服务器
5s.login(sender, password)
6# 发送邮件
7s.sendmail(sender,receiver,msg.as_string())
8# 关闭服务器连接
9s.quit()
结果如下:

2、含有图片信息的发送

1# 准备邮件 email模块
2from email import encoders
3from email.mime.base import MIMEBase
4from email.mime.multipart import MIMEMultipart  
5from email.mime.text import MIMEText 
6from email.mime.image import MIMEImage 
7from email.mime.application import MIMEApplication 
8import os
9os.chdir(r"D:/图片"## 进入图片所在的工作路径 
10
11# 发送邮件 smtplib模块
12import smtplib
13
14# 邮件相关参数
15sender = "10******90@qq.com" 
16receiver = "10******90qq.com" 
17subject = "爬虫俱乐部" 
18password = "n**************j" 
19
20# 邮件基本格式信息
21msg = MIMEMultipart() ## 设置email信息
22msg["subject"] = subject ## 邮件主题
23msg["From"] = sender ## 发件人信息
24msg["To"] = receiver ## 收件人信息
25
26# 邮件正文信息 图片及文本
27msg_content = MIMEText("<img src = 'cid:123'/>海洋", _subtype = "html")
28msg.attach(msg_content)
29
30img = MIMEImage(open("Tu.jpg",mode = "rb").read())
31img.add_header("Content-ID","123"## 给图片设置ID值
32msg.attach(img)
33
34# 发送邮件
35## 连接 SMTP 服务器
36s = smtplib.SMTP()
37s.connect("smtp.qq.com")
38## 登录服务器
39s.login(sender, password)
40## 发送邮件
41s.sendmail(sender,receiver,msg.as_string())
42## 关闭服务器连接
43s.quit()
结果如下:
以上就是本期推文的全部内容了,下期再见~




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
批量处理变量名和标签的小方法

计算工作日的小能手——workdays

Seminar | 企业错报与银行贷款合同

Seminar | 共同基金行业的性别歧视
Seminar | 来自女儿的塑造:高管、女性社会化与企业社会责任

小贴士:Markdown的基本语法

听说相貌也能量化 | 调用百度人脸检测API实现颜值打分

列出指定属性的变量|findname命令比ds命令

新一代的标签转码小能手
【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

数据转置pro之sxpose2
文件"搬家"小助手:mvfiles

pyecharts绘图——河流图展示

你知道MDPI期刊的热门题目吗?

文件合并你不行,mergemany来帮宁
分组进行描述性统计的小技巧 --astx命令介绍
新年快乐|爬虫俱乐部2020年度总结

不能忘却的记忆| B站弹幕爬虫

Python中实现Excel的重复值提取
fileexists:告诉你“我”存在吗?

工作中一切困难的解决途径——motivatedolly

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存