学习python的目的是为了让我们的工作生活能够更加轻松,和上节课一样,本节课讲一个python的实际应用——自动群发邮件。
发送邮件需要用到smtplib和email两个模块,这两个都是内置模块,不需要安装。其中smtplib模块负责发送邮件,email模块负责构造邮件内容。
python中模块繁多,想要都学会很难。我们可以根据自己的需要来学习。在搜索学习方法时,一方面可以根据模块名称来搜索,比如【smtplibl模块】,另一方面也可以根据关键字搜索,比如【python 发送邮件】。
对于学习模块,要搞清楚模块中存在哪些方法以及方法的使用。这些都可以通过网络搜索+自己动手操作来学习。为了节约篇幅,我省略了搜索过程,直接开始操作。总结下搜索到的信息,发送邮件需要用到smtplib模块中的以下代码:
import smtplib
server = smtplib.SMTP()
server.connect(host, port)
server.login(username, password)
server.sendmail(sender, to_addr, msg.as_string())
server.quit()
第一行是导入smtplib模块,第三行是调用smtplib模块中的SMTP协议,smtplib.SMTP()是变量server的值,之后再使用smtplib.SMTP()中的方法时只要写【server.方法】即可。顺便一提,SMTP的意思是简单邮件传输协议,是由原服务器到目的服务器传送邮件的一组规则。
第四行代码是连接服务器,host是指定连接的邮箱服务器的域名,post是端口,一般情况下SMTP默认端口是25。如果25不行,可以通过搜索或者去邮箱设置里面查看端口。
以QQ邮箱为例,通过搜索【QQ邮箱 smtp设置】可知,SMPT服务器地址是【】,端口是465或587。
这里将端口写为465,实际操作中可以先尝试默认值,如果不行再尝试其它。将host和port的值代入,代码如下:
server.connect(‘’, 465)
注意,QQ邮箱一般默认关闭SMTP服务,需要先开启它。开启方法是,登录邮箱,在顶部的【设置】按钮中选择【账户】,然后下拉到下图位置,将【开启服务】中的【POP3/SMTP服务】开启。
开启时需要保密手机发送短信,完成后会收到QQ邮箱提供的授权码,有了这个授权码就可以不通过网页邮箱或邮箱客服端登录,而是用邮箱账号+授权码获取邮箱服务器内容。授权码一定要保存好,因为使用SMTP服务登录邮箱时,要输入授权码作为登录密码。
第五行代码的作用是输入用户名和密码登录邮箱,用户名是登录邮箱地址,密码是上面提到的授权码。因为用户名和授权码是敏感信息,所以这里会用input()函数在代码运行时输入,并将值赋给变量。代码如下:
from_addr = input('请输入发件邮箱登录用户名')
password = input('请输入发件邮箱授权码')
server.login(from_addr,password)
第6行代码中的三个参数分别是发件人、收件人和邮件内容。代码如下:
to_addr = 'xxxx@'
server.sendmail(from_addr,to_addr,msg.as_string())
发件人指的是登录邮箱,和第五行代码中的登录名一致,因此都用变量from_addr。收件人指的是接收邮件的邮箱地址。邮件内容中msg是变量,后面的【.as_string】的作用是将变量转化为字符串的形式。变量如何赋值会在后面的email模块中讲到。
第七行代码【server.quit()】的作用是退出服务器。到这里关于smtplib模块就讲完了,整理下前面讲到的代码,如下:
import smtplib
#发件人的信息
from_addr = input('请输入发件邮箱登录用户名')
password = input('请输入发件邮箱授权码')
#收件人邮箱
to_addr = 'xxxx@'
#调用smtplib模块中的SMTP协议
server = smtplib.SMTP()
#指定连接服务器的域名和端口
server.connect('',25)
#输入用户名和授权码,登录邮箱
server.login(from_addr,password)
#输入发件人、收件人和邮件内容,发送邮件
server.sendmail(from_addr,to_addr,msg.as_string())
#关闭服务器
server.quit()
接下来是email模块。email模块是用来写邮件内容的,内容可以是纯文本、HTML、图片、附件等多种形式。导入email模块代码如下:
#内容形式为纯文本、HTML
from email.mime.text import MIMEText
#内容形式为图片
from email.mime.image import MIMEImage
#内容形式为组合,可包含文本和附件
from email.mime.multipart import MIMEMultipart
下面我们从最基础的入手,导入内容形式为纯文本的方法,发一封内容只有一句话的邮件。代码如下:
from email.mime.text import MIMEText
#通过变量msg给邮件正文赋值
msg = MIMEText('send by python','plain','gbk')
第二行代码中,第一个参数是邮件的内容,第二个参数是文本类型,默认是plain(纯文本),第三个参数是文本编码,中文为“gbk”。到这里代码就完成了,整理完成的代码如下:
import smtplib
from email.mime.text import MIMEText
#发件人信息
from_addr = input('请输入发件邮箱登录用户名')
password = input('请输入发件邮箱授权码')
#收件人邮箱
to_addr = 'xxxx@'
#通过变量msg给邮件正文赋值
msg = MIMEText('send by python','plain','gbk')
#调用smtplib模块中的SMTP协议
server = smtplib.SMTP()
#指定连接服务器的域名和端口
server.connect('',25)
#输入用户名和授权码,登录邮箱
server.login(from_addr,password)
#输入发件人、收件人和邮件内容,发送邮件
server.sendmail(from_addr,to_addr,msg.as_string())
#关闭服务器
server.quit()
代码可以分为三部分,第一部分是导入模块,第二部分是定义变量,包括发件人信息、收件人邮箱和邮件正文,第三部分是通过SMTP协议中的方法连接服务器,登录邮箱,发送邮件。
运行上面的代码,如果没有报错,应该会收到一封如下图所示的邮件。如果报错也不要紧张,按照提示进行排查,这是一个积累debug经验的好机会。
看到上面的邮件,你会发现它太简陋了。没有发件人信息,没有主题,正文内容简单......不要着急,下节课我们将继续完善这封邮件。
如果觉得《python自动群发邮件_24.python之自动群发邮件(1)》对你有帮助,请点赞、收藏,并留下你的观点哦!