美文网首页
Python学习31:用python自动发邮件(1)

Python学习31:用python自动发邮件(1)

作者: 简洁的书写 | 来源:发表于2024-09-10 22:31 被阅读0次

到目前为止,编写的所有程序均为单机程序,无法连接网络。现在来编写一个网络程序,实现自己电脑和其他电脑的交互。以相对简单的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类创建一个实例对象,括号内使用格式化的方式传入了收件人信息。

相关文章

网友评论

      本文标题:Python学习31:用python自动发邮件(1)

      本文链接:https://www.haomeiwen.com/subject/xcmuljtx.html