smtplib模块-python学习28
学会搜索和自学模块
遇到未见过且要待解决的问题,可以通过搜索先找到方向;
搜索关键词“发送邮件 python”,找到如下二个模块:
smtplib,email模块:
smtplib是用来发送邮件用的,email是用来构建邮件内容的。这两个都是Python内置模块。
到底学习什么模块,关键在于我们的需求,这样我们才能从需求出发找到对应的解决方案,解决自己的问题。
我们还要学会关键词搜索的方式,一般,提供的关键字越多,搜索引擎返回的结果越精确。我们可以使用+号或者空格连接关键词,也可使用之前学习的and和or来连接,其含义和之前学习的一样,分别表示“并且”和“或者”。
对于smtplib模块,我们想要去查看它的官方文档,也只需要在浏览器里搜索关键词“smtplib python”就好。
这个文档提供的内容有:需要向smtplib模块输入什么;smtplib模块能做什么;smtplib模块返回的是什么;常见的报错;SMTP对象有哪些方法及如何使用;一个应用实例。
如果官方文档内容不好理解,重新搜索一次,关键词换成 “smtplib 教程” ,就能看到好多好多中国人编写的内容。在可读性上,是要比官方文档好一些的,但缺点在于良莠不齐。我们可以自行挑选适合自己的去阅读。
针对新模块,我们直接问两个问题:这两个问题就是:1.这两个模块分别有什么方法? 2.模块的方法怎么用?
关于第1个问题,需要点开搜索到的内容看看,可以看别人的简介;也可以直接看代码,多对比不同人写的代码,那些重复出现的代码可能就是我们要找的方法。
找到的主要方法如下:

第一行,是引入smtplib模块。
第三行,server是一个变量,smtplib.SMTP()是变量server的值。我们已经知道了smtplib是模块的名称,那SMTP是什么意思呢?
SMTP 是一个类(class),再往下面滑可以看到其中包含了很多函数;
调用 smtplib 模块下、SMTP 类下的方法,应这样写:smtplib.SMTP.方法。
SMTP (Simple Mail Transfer Protocol)翻译过来是“简单邮件传输协议”的意思,SMTP 协议是由源服务器到目的地服务器传送邮件的一组规则。
可以简单理解为:我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器。
第四行代码,就是干这个工作的,连接(connect)指定的服务器。
host是指定连接的邮箱服务器,你可以指定服务器的域名。通过搜索“xx邮箱服务器地址”,就可以找到;
port 是“端口”的意思。端口属于计算机网络知识里的内容,现在我们只要知道它是一个【整数】即可。
我们需要指定SMTP服务使用的端口号,一般情况下SMTP默认端口号为25。
如果25行不通,可以通过搜索或者去邮箱设置里面查看端口。比如用自己的企业邮箱来发邮件,登录邮箱后,在【设置-选项-POP和IMAP】里面可以看到这些信息:

查询包括服务器名称,端口和加密方式。服务器名称是:mail.forchange.tech,端口是587。也可以登录自己的邮箱,查看这些信息;
如果是QQ邮箱,查出的服务器名称和端口号是:SMTP服务器地址是:smtp.qq.com,端口是465或587;
代码有二种写法:
一是使用默认端口号:

二是尝试搜索到的端口号:

注意!QQ 邮箱一般默认关闭SMTP服务,我们得先去开启它。打开https://mail.qq.com/,登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户设置】,然后下拉到这个位置。

像上面的一样,把第一项服务打开。需要用保密手机发送短信,完成之后,QQ 邮箱会提供给你一个授权码,授权码的意思是,你可以不用QQ的网页邮箱或者邮箱客户端来登录,而是用邮箱账号+授权码获取邮箱服务器的内容。
如果打算用QQ邮箱自动发邮件,请保存好这个授权码。在使用SMTP服务登录邮箱时,要输入这个授权码作为密码登录,而【不是】你的邮箱登录密码。
第五行代码,login是登录的意思,也就是登录指定的服务器用的,需要输入两个参数:登录邮箱和授权码。


第六行代码:sendmail是“发送邮件”的意思,是发送邮件用的,sendmail()方法需要三个参数:发件人,收件人和邮件内容。
这里的发件人from_addr与上面的username是一样的,都是上面讲的登录邮箱,所以只用设置一次。
msg.as_string()是一个字符串类型:as_string()是将发送的信息msg变为字符串类型。

第七行:最后一行代码,quit是“退出”的意思,就是退出服务器。
总结:
