哇!好久不见!终于有时间继续更新了,关于上一个留下的问题,我想抽别的时间来写,感谢原谅!笔芯~
相信对于上班族来说,学习Python的一个比较主要的应用可能就是自动发送邮件给比较多的人了吧!那么针对这样的诉求,我们今天学习群收发邮件好咯!
这次我们依旧以分级的方式学习!第一步~
一份简单的邮件
我们可以通过网络搜索,了解我们要写发邮件需要用到smtplib、email这两个模块,其中smtplib是用来发送邮件的,email是用来构建邮件内容的。这两个都是Python内置模块。
smtplib模块
首先我们来看看常用到的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模块
# server是一个变量,smtplib.SMTP()是变量server的值。
# SMTP (Simple Mail Transfer Protocol)翻译过来是“简单邮件传输协议”的意思,SMTP协议是由源服务器到目的地服务器传送邮件的一组规则。也就是说我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器。
# 我们需要指定SMTP服务使用的端口号,一般情况下SMTP默认端口号为25。(如果不可以,自己去搜索噢!设置——选项——POP和IMAP设置)
# connect也就是连接所指定的服务器。
# host是指定连接的邮箱服务器,你可以指定服务器的域名。通过搜索“xx邮箱服务器地址”,就可以找到。
# port 是“端口”的意思。端口属于计算机网络知识里的内容,你可以自行搜索了解,现在我们只要知道它是一个【整数】即可。
在没有工作之前大家应该都会使用qq邮箱吧,那么我们现在就以qq邮箱为例来写代码
import smtplib
server = smtplib.SMTP()
server.connect('smtp.qq.com', 25)
# 使用默认端口 :25
import smtplib
server = smtplib.SMTP_SSL()
# 如果端口是用SSL加密,请这样写代码。其中server是变量名
server.connect('smtp.qq.com', 465)
# 如果出现编码错误UnicodeDecodeError,你可以这样写:server.connect('smtp.qq.com', 465,'utf-8')
注意哦!一般来说qq邮箱是关闭SMTP服务的,我们需要开启它,操作如下:
(登录邮箱——设置——账户设置——开启服务)小提示:保存好密码哦~
server.login(username, password)
# 我们来继续看下面的代码
# login是登录的意思,也就是登录你指定的服务器用的,需要输入两个参数:登录邮箱和授权码。
授权码我们可以使用input() 为安全起见哦~
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
# from_addr:邮件发送地址,就是上面的username
# to_addr:邮件收件人地址
# msg.as_string():为一个字符串类型
# sendmail是“发送邮件”的意思,是发送邮件用的,sendmail()方法需要三个参数:发件人,收件人和邮件内容。
# 发件人和username是一样的。
其中msg.as_string()是一个字符串类型:as_string()是将发送的信息msg变为字符串类型。那么我们可以写出下面的代码。
from_addr = 'xxx@qq.com'
to_addr = 'xxx@qq.com'
server.sendmail(from_addr, to_addr, msg.as_string())
# from_addr:邮件发送者地址。
# to_addr:邮件收件人地址。
# msg.as_string():为一个字符串类型
不知道大家有没有发现,我们没有写msg是什么?email模块该登场了吧~
email模块
email模块就是用来写邮件内容,可以是纯文本,图片,附件等多种形式。让我们来一一学习吧!
MIMEText: 内容形式为纯文本、HTML页面。
MIMEimage: 内容形式为图片。
MIMEMultipart: 多形式组合、可包含文本和附件。
# 导入方式
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
我想此时此刻,可能很多人会疑惑,为什么不是import email ?
其实email是一个“包”,而smtplib是一个模块,模块(module)一般是一个文件,而包(package)是一个目录,一个包中可以包含很多个模块,可以说包是“模块打包”组成的。Python中的包都必须默认包含一个init.py的文件。init.py控制着包的导入行为。假如这个文件为空,那么我们仅仅导入包的话,就什么都做不了。所以直接是行不通的。
MIMEText(msg,type,chartset)
# msg:文本内容,可自定义
# type:文本类型,默认为plain(纯文本)
# chartset:文本编码,中文为“utf-8”
了解的参数的内容,我们就可以写出我们想要发送邮件的内容,介于我们是1.0版本,我们就写纯文本好了。
from email.mime.text import MIMEText
msg = MIMEText('刚学会的Python','plain','utf-8')
现在有内容了,我们该总结一下整体的代码结构啦!
1. 导入模块:stmplib模块、email模块
2. 定义变量:包括发件人、密码、收件人、正文内容、服务器
3. 使用方法:链接,登录,发送,退出
# 1.导入模块
import smtplib
from email.mime.text import MIMEText
# 2.定义变量
from_addr = 'xxx@qq.com'
password = '你的授权码数字'
to_addr = 'xxx@qq.com'
smtp_server = 'smtp.qq.com'
msg = MIMEText('刚学会的Python','plain','utf-8')
# 3.使用方法
server = smtplib.SMTP(SMTP_SERVER,465)
server.login(from_addr,password)
server.sendmail(from_addr,to_addr,msg.as_string())
server.quit()
福利来啦!
# smtplib 用于邮件的发信动作
import smtplib
from email.mime.text import MIMEText
# email 用于构建邮件内容
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = 'xxx@qq.com'
password = '你的授权码数字'
# 收信方邮箱
to_addr = 'xxx@qq.com'
# 发信服务器
smtp_server = 'smtp.qq.com'
# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
msg = MIMEText('刚学会的Python','plain','utf-8')
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL()
server.connect(smtp_server,465)
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()
经过尝试,你收到你刚学会的邮件了嘛?
可能会有些同学报错,可以看看小孤有没有写报错解决方式呢?又是热爱小孤的一天~