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

构建邮件正文(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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容