网站首页 > 技术文章 正文
复习一下上一关的内容 ,模块的相关知识,以及学习模块的方法(2图)
得了,我们可以开始今天的项目实操了
1. 明确项目目标
这一关的主题,其实最早是来源于往期学员的一个问题:学员小贾是一名外贸人员,每到了节假日,要给客户发祝福邮件。
虽然现在群发邮件比较方便,但还是要每次手动添加收件人的邮箱。小贾想:要是能够自动发送邮件给这些人就好了。他找到了助教求助。
之前跟你聊过,希望学习Python知识,是能够帮助大家解决实际问题的。而小贾的问题,就是一个可以完美地被Python解决的需求,而且在职场中也是一个普遍存在的需求。
为了完成这个项目呢,我们要学会自学新的模块
2. 分解过程,拆解项目
我们可以把这个项目拆解成三个版本,各个版本功能逐步完善 。如图示
3. 逐步执行,代码实现
3.1 版本1.0:学习模块,发一封简单邮件
3.1.1搜索模块资料
在编程世界中,我们不需要什么知识都一把抓,而是遇到问题之后,产生了某种需求,才会去找对应的解决方案。
这个方案可能是某个模块,也可能是某个函数~
经过搜索大法后,我们可以知道需要实现这一版本的功能需要用到python的两个内置模块 smtplib,email
可以初步画一下这个简单的结构图 ,如图示
这里在搜索的时候跟你们说个技巧吧,比如你想要找到stmplib 这个 模块,那么你搜索‘stmplib python’,如果你英文足够好的话,那你可以去看官方文档,如果你只喜欢看中文的话,我建议你去这个网站去搜索资料 ‘CSDN博客’,这个网站上有最优秀和经验最丰富的码师可以交流,他们的很多博客也可以借鉴、参考。
这是我费了很大力气找到的smtplib的方法 ,如图示
我们可以看到,为了减少变量重复出现的次数,一般将 smtplib.SMTP() 赋值给server,我本身也认同这样的办法
这里给大家简单科普一下,SMTP (Simple Mail Transfer Protocol)翻译过来是“简单邮件传输协”的意思,SMTP 协议是由源服务器到目的地服务器传送邮件的一组规则。
可以简单理解为:我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器。
第四行代码,就是干这个工作的,连接(connect)指定的服务器。
host是指定连接的邮箱服务器,你可以指定服务器的域名。通过搜索“xx邮箱服务器地址”,就可以找到。
port 是“端口”的意思。端口属于计算机网络知识里的内容,你可以自行搜索了解,现在我们只要知道它是一个【整数】即可。
我们需要指定SMTP服务使用的端口号,一般情况下SMTP默认端口号为25。
风变编程官网的服务器名称是mail.forchange.tech,端口是587。
3.1.2 用QQ做案例讲解
因为一般二十几岁的年轻人使用最多的还是QQ邮箱,所以我会以QQ邮箱作为讲解例子
QQ 邮箱采用的加密方式是SSL,我们需要写成这样:如图示
然后接下来我要讲一个tips,其实我们一般qq邮箱默认是关闭SMTP服务的,你需要自行手动开启,进入你的QQ邮箱后,点击位于顶部的【设置】按钮,选择【账户设置】,进入到这个界面,如图示,蓝色方框的那个要保持开启,照着他的流程做便可以开启
成功开启以后,网页会给你一个授权码,把它保存下来,接下来的代码中,发邮件的时候用到的是授权码,而不是你的QQ密码了。它是4*4=16位的,也就是**** **** **** **** 这样的,还有不要随意泄露,不然的话可能会被癫佬拿去打广告。
好了,一步一步讲解代码
login是登录的意思,也就是登录你指定的服务器用的,需要输入两个参数:登录邮箱和授权码。如图示
把两个参数放在最前面。这部分的代码我们也可以写出来了:如图示
第六行代码sendmail是“发送邮件”的意思,是发送邮件用的,sendmail()方法需要三个参数:发件人,收件人和邮件内容。如图示
msg.as_string()是一个字符串类型:as_string()是将发送的信息msg变为字符串类型。最后一行代码,quit是“退出”的意思,就是退出服务器。
3.1.3 对smtplib 做一个初步总结,如图示
3.1.4 email 模块
email 模块:也就是用来写邮件内容的模块。这个内容可以是纯文本、HTML内容、图片、附件等多种形式。如图示
每种形式对应的导入方式是这样的:如图示
这里再次给大家科普一下,
你可以复制上面的内容到本地的编辑器上,按住 ctrl 点击查看含义。
请你按住ctrl同时点击mime,你会看到一个名为init.py的空文件,这说明 email是其实是一个“包”。当然,并不是“包治百病”的那个“包”。
这就要谈到“模块”和“包”的区别了,模块(module)一般是一个文件,而包(package)是一个目录,一个包中可以包含很多个模块,可以说包是“模块打包”组成的。
但为什么看到那个空文件,就能知道email是包呢?这是因为Python中的包都必须默认包含一个init.py的文件。
init.py控制着包的导入行为。假如这个文件为空,那么我们仅仅导入包的话,就什么都做不了。所以直接import email是行不通的。
所以,我们就需要使用from … import …语句,从email包目录下的【某个文件】引入【需要的对象】。比如从email包下的text文件中引入MIMEText方法。中文说起来有点复杂,看代码就懂了:如图示
通过简单的学习,我们就能发现MIMEText()方法需要输入三个参数:文本内容,文本类型和文本编码。如图示
文本类型和文本编码,我们默认用'plain'和'utf-8'。文本内容,我就写一句最简单的“send by python”吧,你可以写自己想写的话啦。如图示
3.1.5综合两个模块的代码结构为,如图示
那么细致化结构接就是,如图示
3.1.6 那么版本1.0 的代码为,(带注释)两图
这里再给大家科普一下啊,就是如果你的python版本 是3.7 以上的,可能会报错,
ValueError: server_hostname cannot be an empty string or start with a leading dot.
因为Python 3.7修改了ssl.py,导致smtplib.SMTP_SSL也连带产生了问题。那你需要这样子做,如图示
经过九牛二虎之力,我终于是收到了人生第一封由python发来的QQ邮件,如图示
说实话,自己还感觉挺不可思议的
3.2 版本2.0:给自己发一封完整邮件
3.2.1 完整的邮件就是说,增加多两个功能,完善一下。如图示
我们要增加这几行代码,如图示
第一行代码,从email包引入Header()方法。Header()是用来构建邮件头的。标准邮件需要三个头部信息:From , To 和 Subject ,第三到五行代码就提供了这三个信息。这里我们可以自定义,比如from发件人邮箱地址,to收件人邮箱地址,主题“python test”。
等我们增加了邮件头的代码后,收到邮件会有所不同,如图示
而且你还可以定义,如图示
原本邮件内容是写在这里:如图示
如果你想要写很长的内容,建议先设置一个变量text用来放正文内容。如图示
3.2.2 所以版本2.0 的最终代码为,如图示(3图)
3.3 版本3.0:群发完整邮件
3.3.1 这里主要讲解一下,用python群发邮件的三种方法,如图示
一,是将收件人信箱的变量设置成一个可以装多个内容的列表:需要注意的是,to_addrs变量也将作为参数被传入Header方法中:
直接运行程序的话,这里就会发生错误:AttributeError: 'list' object has no attribute 'decode'。
我们要将to_addrs变成一个字符串,将列表变成一个字符串,这个时候我们就要用到join()函数了
一分钟回顾一下join()函数的用法,大家看案例代码 ,代码以及运行结果如图示
join()的用法是str.join(sequence)
二,接下来是while循环,代码以及运行结果如图示
三,将邮箱地址写入csv模块的方法是write(),步骤是:1.引入csv模块;2.提供需要写入csv文件的数据,3.建文件并写入。代码如图示
好了,关于python发邮件的全部知识就讲解到这了。
4. 1 第17关课后练习-自制二维码
练习介绍
练习目标
我们会通过今天的作业,学习一个新的模块:MyQR,制作一个动态二维码。
练习要求
在昨天的练习里,你已经可以通过自己的学习,完成代码的升级。
所以,今天我们不妨多做些新的尝试。
这次的练习,没有提示,没有准备好的网址。
需求很明确:请你在本地编辑器(如vscode、Pycharm),用 Python 制作一个动态二维码。
所以,请你运用在课堂上看到的提示和知识,去思考,去搜索,去学习,完成今天的练习。
代码实操
你应该已经知道了这个模块是:MyQR,也能读懂相关的代码。
请你自学相关模块知识后,自行下载一个gif,然后在本地编辑器(如vscode、Pycharm)完成代码吧。
因为系统里无法展示最后的动态二维码,当你在本地编辑器完成代码并运行成功后,直接点击右侧的运行进入下一步即可。
对了,不要忘了先安装myqr模块,Windows终端里运行'pip install myqr',Mac终端运行'pip3 install myqr'
示例代码以及运行结果如图示(2图)
这个生成的二维码就是风变编程官网的链接
4.2 进阶练习-绝对值得多种求法
练习介绍
练习目标:
通过这个练习,你至少可以用3种方法去求某个数的绝对值。
练习要求:
请你通过搜索和步骤中的提示,用不同的方法求绝对值。
建议将其封装成函数,如“abs_value1()”。
——Directly made by 潜·2·index-crossing
猜你喜欢
- 2025-03-20 Python趣味打怪:60秒学会一个例子,147段代码助你从入门到大师
- 2025-03-20 引人遐想,用 Python 获取你想要的“某个人”摄像头照片
- 2025-03-20 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
- 2025-03-20 Python搭建UDP网络通信模型,看了你也会
- 2025-03-20 Python学习——018一键发送Excel工资条
- 2025-03-20 Python实现机器学习算法——贝叶斯网络
- 2025-03-20 Python 基础教程十五之 Python 使用requests库发送http请求
- 2025-03-20 国外友人开创Python模拟登陆神库,完美修改它为咱们所用
- 2025-03-20 全新上线!免费体验最热门Claude2API接口Python版本整合QQ
- 2025-03-20 使用 Python 自动发送 QQ 消息(python自动发送邮件)
- 258℃Python短文,Python中的嵌套条件语句(六)
- 258℃python笔记:for循环嵌套。end=""的作用,图形打印
- 257℃PythonNet:实现Python与.Net代码相互调用!
- 252℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 107℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 83℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)