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

Python学习32:用python自动发邮件(2)

作者: 简洁的书写 | 来源:发表于2024-09-11 18:38 被阅读0次

构建邮件正文(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创建的实例对象。

       团队合照无法直接添加到邮件的正文,需要将其设置为邮件的附件。但是,由于程序无法直接将图片文件设置为附件。所以,要将图片文件以程序能识别的方式打开并读取出来。而这需要使用Python的 open()函数和with…as语句。

函数: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")

导入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)

相关文章

网友评论

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

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