到目前为止,编写的所有程序均为单机程序,无法连接网络。现在来编写一个网络程序,实现自己电脑和其他电脑的交互。以相对简单的Python自动发送邮件为例来进行讲解。
在日常工作中,我们发送邮件时,会登录邮箱、编辑信息、发送邮件。使用Python代码发送邮件几乎也是一个固定化的操作。
生活中,发送邮件的第一步,通常是登录邮箱。
但是,使用代码自动发送邮件时,第一步是连接到指定邮箱的服务器。
这里,我们以QQ邮箱为例来进行讲解。
开启SMTP服务
连接邮箱服务器之前,我们需要先在QQ邮箱中开启SMTP服务。
SMTP代表简单邮件传输协议,相当于一种计算机之间发邮件的约定。
第一步,打开网址mail.qq.com,输入自己的帐号和密码,登录QQ邮箱并找到「设置」。
开启SMTP服务
第二步,点击「设置」,找到「账户」。
开启SMTP服务
第三步,滑动页面找到「IMAP/SMTP服务 」,点击开启。
获取授权码
因为后续使用代码登录邮箱时,我们需要使用授权码而非QQ密码。
所以,在开启STMP服务后,顺便获取它的授权码。
如图,点击「开启服务」后会弹出短信验证,需要用自己的手机号发送指定内容到指定号码。
发送完成后,点击「我已发送」。
获取授权码
完成验证后,将会获得一个「授权码」(授权码不要告诉其他人)。
复制并保存授权码,我们后续在登录邮箱时需要使用。
(随着QQ邮箱的功能更新,具体的操作界面可能会发生变化,详情可以参考官方教程。
连接邮件服务器(SMTP_SSL)
导入内置模块smtplib,通过该模块的类SMTP_SSL,创建了一个实例对象qqMail。
# 导入smtplib模块
import smtplib
# 连接邮箱服务器:连接邮箱服务器:使用smtplib模块的类SMTP_SSL,创建一个实例对象qqMail
qqMail = smtplib.SMTP_SSL("smtp.qq.com", 465)
模块:smtplib是Python的内置模块,可以直接导入使用。该模块主要负责发送邮件的动作,比如:连接邮箱服务器,登录邮箱,发送邮件等。
类:SMTP_SSL是smtplib模块中的一个类,用于连接邮箱服务器。可以接受两个参数。
服务器地址:第一个参数"smtp.qq.com"是服务器地址。简单来说,我们需要使用该地址帮我们代收发邮件。注意,该地址以字符串形式传入。
端口号:第二个参数是端口号,每个服务器有多个端口,只有通过对应的端口,程序才能访问到该服务器。为了对端口号进行区分,将每个端口进行编号,就是端口号。示例中,使用的QQ邮箱的SMTP的端口号是465。
对象名:一个变量名,给对象设定的名称。示例中的对象qqMail,会在后续用于登录和发送邮件。
登录邮箱

邮箱账号和授权码:将邮箱帐号aLing@qq.com,以字符串形式赋值给 mailUser。同样地,将邮箱授权码abcnawckdujkdace,以字符串形式赋值给 mailPass。注意,课程中使用阿玲帐号,但在本地实际操作时,需使用自己的QQ邮箱和授权码,否则会报错。
对象名:一个变量名,给对象设定的名称。示例中,qqMail是我们前面创建的实例对象。
方法:类SMTP_SSL中的一个方法login,用于登录邮箱。通过对象名.方法名()的格式使用。
参数:login()方法,依次接收两个参数:邮箱账号和授权码。第一个参数为邮箱账号,第二个参数为授权码。
email模块主要负责构造邮件页面的布局,比如发件人,收件人,主题,正文,附件等。
下面,我们以发送带附件的邮件为例,先来学习如何利用该模块来编辑收发件人和主题。
# 导入smtplib模块
import smtplib
# 从email.mime.multipart中导入MIMEMultipart类
from email.mime.multipart import MIMEMultipart
# 从email.header中导入Header类
from email.header import Header
# 连接邮箱服务器:使用smtplib模块的类SMTP_SSL,创建一个实例对象qqMail
qqMail = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 设置登录邮箱的帐号为:"aLing@qq.com",赋值给mailUser
mailUser = "aLing@qq.com"
# 将邮箱授权码"abcnawckdujkdace",赋值给mailPass
mailPass = "abcnawckdujkdace"
# 登录邮箱:调用对象qqMail的login()方法,传入邮箱账号和授权码
qqMail.login(mailUser, mailPass)
# 设置发件人和收件人
sender = "aLing@qq.com"
receiver = "aFei@qq.com"
# 使用类MIMEMultipart,创建一个实例对象message
message = MIMEMultipart()
# 将主题写入 message["Subject"]
message["Subject"] = Header("团队合照")
# 将发件人信息写入 message["From"]
message["From"] = Header(f"aling<{sender}>")
# 将收件人信息写入 message["To"]
message["To"] = Header(f"阿飞<{receiver}>")
导入MIMEMultipart类:类MIMEMultipart,用于整合邮件头、正文和附件等信息。所以,当我们要发送带附件的组合型邮件时,需要从email.mime.multipart中导入MIMEMultipart类。示例中,为导入MIMEMultipart类的固定写法。对于这行代码,我们使用时会查询即可,不一定要背下来。
导入Header类:类Header,用于设置邮件头,即邮件的主题,收发件人。所以,当我们要设置邮件的主题,收发件人时,就需要从email.header中导入Header类。示例中,为导入Header类的固定写法。同理,这行代码我们使用时会查询即可,不一定要背下来。
收发件人:将"aLing@qq.com"和"aFei@qq.com"分别设置为发件人和收件人的邮箱账号。注意,这里使用阿玲和阿飞的帐号,但在本地实际操作时,需使用自己的邮箱账号和收件人的邮箱账号,否则会报错。
实例化对象:通过类MIMEMultipart,创建一个实例对象message。此时,对象message就相当于一份空白的邮件,我们需要给它添加各种内容。
设置主题:前面我们通过类MIMEMultipart,创建了实例对象message。而message["Subject"],就是用于接收邮件的主题信息。右侧使用Header类创建一个实例对象,括号内传入"团队合照"作为主题信息。
设置发件人:同理,message["From"]是用于接收发件人信息。右侧使用Header类创建一个实例对象,括号内使用格式化的方式传入了发件人信息。
设置收件人:最后,message["To"]是用于接收收件人信息。右侧使用Header类创建一个实例对象,括号内使用格式化的方式传入了收件人信息。

网友评论