构建邮件正文(MIMEText)
第8行,从email模块中导入了MIMEText类。
第34行,通过使用类MIMEText创建实例对象,编辑了邮件的正文。
# 导入smtplib模块
import smtplib
# 从email.mime.multipart中导入MIMEMultipart类
from email.mime.multipart import MIMEMultipart
# 从email.header中导入Header类
from email.header import Header
# 从email.mime.text中导入MIMEText类
from email.mime.text import MIMEText
# 连接邮箱服务器:使用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}>")
# 设置邮件的内容,赋值给变量textContent
textContent = "阿飞,这是插画同学绘制的团队合照,望查收~"
# 编辑邮件正文:使用类MIMEText,创建一个实例对象mailContent
mailContent = MIMEText(textContent, "plain", "utf-8")
导入MIMEText类:类MIMEText,用于构建邮件的正文。当我们构建邮件正文时,需要从email.mime.text中导入MIMEText类。示例中,为导入MIMEText类的固定写法。对于这行代码,我们使用时会查询即可,不一定要背下来。
类名:类MIMEText,用于构建邮件的正文。示例中,使用该类创建一个实例对象。
文本内容:第一个参数是文本内容,即我们需要发送邮件的正文内容。示例中,textContent是我们提前编辑好的文本内容。当然,我们在本地发送邮件时,可以根据需求修改邮件的内容。
文本格式:第二个参数是文本格式,表示我们的正文内容以何种格式展示。示例中,"plain"表示纯文本的格式。简单来说,纯文本格式就是文本内容不加任何修饰,比如粗体,斜体等。
编码:第三个参数是编码。简单来说,示例中的"utf-8"编码,能防止中文乱码。
实例对象:一个变量名,这里是类MIMEText创建的实例对象。
![](https://img.haomeiwen.com/i14777386/dc2915e7b4c7eab9.png)
团队合照无法直接添加到邮件的正文,需要将其设置为邮件的附件。但是,由于程序无法直接将图片文件设置为附件。所以,要将图片文件以程序能识别的方式打开并读取出来。而这需要使用Python的 open()函数和with…as语句。
![](https://img.haomeiwen.com/i14777386/64eda635e82b3644.png)
函数:open() 函数,用于打开一个文件,并将其以对象的形式返回。通常来说,open() 函数接收两个参数:文件路径和打开方式。
文件路径:第一个参数是文件路径。示例中,filePath是我们提前获取的文件路径。当然,在本地使用图片时,需要本地图片的真实路径。Windows系统的用户,路径前面加r来防止转义。比如:r"\Users\aLing\team.png"
打开方式:打开方式,用特定的字符串表示。比如这里的"rb"。示例中,"rb"是Read Binary的缩写,表示以二进制形式读取文件的内容。对打开方式的种类,有兴趣的同学可以自行学习,这里就不再进一步深究了。
with open( ) as:with open() as,先执行with后的open()函数,将open()函数的返回值,赋值给as后面的变量。示例中,会将读取到的图片文件赋值给变量imageFile。
一个冒号::这个是with … as语句的固定搭配。类似于if语句和for语句,表示接下来缩进的代码属于该语句。
缩进:和if语句、for循环的缩进一致,使用四个空格。缩进的代码属于的with … as语句。
函数:read()函数,用于读取一个文件的内容,方便我们将其存储在变量中。
读取文件:读取文件的格式为:变量名.函数名()示例中,表示将前面打开的文件imageFile读取出来。
读取了图片文件的内容后,就可以将其添加到邮件的附件中了。前面构建正文时,需要导入类MIMEText。而设置图片附件,需要导入类MIMEImage。下面,一起来看看吧。
# 设置邮件的内容,赋值给变量textContent
textContent = "阿飞,这是插画同学绘制的团队合照,望查收~"
# 编辑邮件正文:使用类MIMEText,创建一个实例对象mailContent
mailContent = MIMEText(textContent, "plain", "utf-8")
# 将文件路径,赋值给filePath
filePath = "/Users/aLing/team.png"
# 使用with open() as语句以rb的方式,打开路径为filePath的图片,并赋值给imageFile
with open(filePath, "rb") as imageFile:
# 使用read()函数读取文件内容,赋值给fileContent
fileContent = imageFile.read()
# 设置邮件附件:使用类MIMEImage,创建一个实例对象attachment
attachment = MIMEImage(fileContent)
# 调用add_header()方法,设置附件标题
attachment.add_header("Content-Disposition", "attachment", filename="团队合照.png")
![](https://img.haomeiwen.com/i14777386/a4ed7646de0c42ca.png)
导入MIMEImage类:类MIMEImage,用于设置邮件的图片类附件。当设置图片附件时,需要从email.mime.image中导入MIMEImage类。示例中,为导入MIMEImage类的固定写法。对于这行代码,我们使用时会查询即可,不一定要背下来。
实例化对象:使用类MIMEImage,创建了实例对象attachment,即设置邮件的附件。类中传入的参数为读取的文件内容fileContent。
方法:add_header()方法,用于设置邮件附件的标题。该方法,通常接收三个参数,前两个为固定参数,我们这里不进行细讲,使用时直接抄写即可。下面,讲解第三个参数。
附件名称:第三个参数用于设置附件的名称。这里使用关键字参数的形式,即形参=实参的格式。示例中,将实际名称"团队合照.png"赋值给filename。
至此,就完成了邮件的正文和附件的编辑。然后,还需要将编辑好的正文和附件,添加到类MIMEMultipart创建的实例对象message中。
如图所示,要将正文和附件添加到邮件中,需要调用对象message的attach()方法。
第1次,将正文对象作为参数传入attach()方法;
第2次,将附件对象作为参数传入attach()方法。
诗词鉴赏
使用with … as 语句和open()函数,打开一个路径为"/Users/file/诗句.txt"的文件,将其赋值给txtFile,然后使用read函数将txtFile读取出来,并输出。
打开一个txt的文本文件,可以在open()函数中设置打开方式为"r"。
# TODO 将文件路径以字符串的格式,赋值给变量path
path = "/Users/file/诗句.txt"
# TODO 使用with … as语句和open()函数以r方式,打开路径为path的文件,并赋值给txtFile
with open(path,"r") as txtFile:
# TODO 使用read()读取txtFile并赋值给data
data = txtFile.read()
# TODO 输出data
print(data)
网友评论