失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python自动群发邮件_24.python之自动群发邮件(1)

python自动群发邮件_24.python之自动群发邮件(1)

时间:2019-11-27 02:01:43

相关推荐

python自动群发邮件_24.python之自动群发邮件(1)

学习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)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。