你要偷偷的学Python,然后惊呆所有人(第六天)

标题无意冒犯,就是觉得这个广告挺好玩的

文章目录

前言

邮件群发

代码参考

伪代码1:发送一个空壳邮件

伪代码2:构建邮件内容

群发邮件

提高代码可复用性与可用性

告白气球

我画了个圈,欢迎大家来我们的小圈子


前言

前期回顾:你要偷偷学Python,然后惊呆所有人(第五天)

本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python。本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本PrimerPlus,所以就跟着它们的目录结构吧。本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。1234567

好,这是一篇“玩乐文”,看看我们今天会做几个好玩的项目呢?坐好咯,打开你们的编译器,不论是在线编译器还是PC编译器

如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号930900780,可领取python学习资料,会节约很多时间,减少很多遇到的难题。

这篇玩完了,下一篇就开始进爬虫咯

邮件群发

有朋友让我写邮件群发的功能,那就来呗?(此处手动补上表情包)

也学了这么些天了,应该对这套方法流程很熟悉了吧,第一步要干什么?

找到群发邮件所使用的模块或包

熟悉或了解该模块或包的使用

怎么了解?手册里有示例的嘛

修修改改,这么一个功能就出来啦

好,明确了步骤之后,我们开始吧:Python3.9库函数支持

···

代码参考

今天情绪有点不高,就直接来个代码参考,对着代码来讲吧

伪代码1:发送一个空壳邮件

我们以QQ邮箱为例(因为我只有QQ邮箱)

在干这个事情之前,我们要先干一个事情:开通QQ邮箱的第三方客户端使用授权。

我们的QQ邮箱并不是说用什么软件都能去发邮件的,这需要授权。

具体怎么弄嘞,

登录QQ邮箱

设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->开通,开通前两个

现在是2020-10-29,如果以后界面又改版了,请搜索上面那一串英文,与时俱进

做完这些步骤之后,我们会拿到一些授权码,记住,使用最新的那个授权码。

# smtplib 用于邮件的发信动作importsmtplib#引入smtplib模块# 发信方的信息:发信邮箱,QQ邮箱授权码from_addr ='xxx@qq.com'password ='你的授权码'# 收信方邮箱to_addr ='xxx@qq.com'# 发信服务器smtp_server ='smtp.qq.com'#目前就是这个了,你也不用去百度啦,我当时百度了十分钟,最后确定了就是它。。。# 开启发信服务,这里使用的是加密传输server = smtplib.SMTP_SSL()server.connect(smtp_server,465)#这个465是端口号,如果不是465就换587试试,实在不行就只能公共端口号25了# 登录发信邮箱server.login(from_addr, password)# 发送邮件server.sendmail(from_addr, to_addr, msg.as_string())# 关闭服务器server.quit()12345678910111213141516171819202122232425

这是一段伪代码,切记,这个是不能运行的,需要你把里面缺失的信息补全了,当然,我们不急着运行,等我讲完。

伪代码2:构建邮件内容

上面那段伪代码是发送邮件的壳,而邮件的具体内容,还得靠email包来实现

这里要重新介绍一下import这个语句了。

对于email这个包

这个包的导入和模块的导入是有不一样的地方,我记得前边是用import导入哪个模块然后不行了来着(不用翻回去找,我健忘症,不知道有没有发出来),现在有结果了。

这就要谈到“模块”和“包”的区别了,模块(module)一般是一个文件,而包(package)是一个目录,一个包中可以包含很多个模块,可以说包是“模块打包”组成的。

在你看不见的地方,有一个init.py文件在暗中操控着这一切(当然,要看也有办法),init.py控制着包的导入行为。假如这个文件为空,那么我们仅仅导入包的话,就什么都做不了。所以直接import email是行不通的。

所以,我们就需要使用from … import …语句,从email包目录下的【某个文件】引入【需要的对象】。比如从email包下的text文件中引入MIMEText方法。

MIMEText(msg,type,chartset)# msg:文本内容,可自定义# type:文本类型,默认为plain(纯文本)# chartset:文本编码,中文为“utf-8”1234

步骤进行到这里,其实就已经可以发出一个邮件了(在前面的伪代码部分,会发现msg填不上,这样:msg = MIMEText('send by python','plain','utf-8'))

动手能力强的朋友可以自己试一下了,动手能力不强的朋友可以跟着我再往下。

就是你会发现这是一个无头邮件。

邮件头(header,没错它也叫header)是这一块区域,包括主题、发件人、收件人等信息:

fromemail.headerimportHeadermsg['From'] = Header(from_addr)msg['To'] = Header(to_addr)msg['Subject'] = Header('python test')12345

把这一块加入到你的代码里去,效果如下:

fromemail.mime.textimportMIMETextfromemail.headerimportHeaderimportsmtplib#这里的邮箱请自己填哦msg = MIMEText('猜猜我是谁:send by python','plain','utf-8')smtp_server ='smtp.qq.com'from_addr ='FF@foxmail.com'to_addr ='XX@qq.com'#to_addr = 'XX@qq.com'msg['From'] = Header('阿喵')msg['To'] = Header(to_addr)msg['Subject'] = Header('这是一份Python发送的邮件哦,今天刚学的哈哈哈')server = smtplib.SMTP_SSL(smtp_server)server.connect(smtp_server,465)#server = smtplib.SMTP()#server.connect(smtp_server,25)server.login(from_addr,'XXX')#授权码要选最新的server.sendmail(from_addr, to_addr, msg.as_string())server.quit()1234567891011121314151617181920212223242526

这段代码里面你把那几个参数填上,就可以去发了。

群发邮件

群发的话,这里有两个办法,我讲一个,提一个,留一个吧:

第一个方法是把 to_addrs写成一个列表形式:

fromemail.mime.textimportMIMETextfromemail.headerimportHeaderimportsmtplibmsg = MIMEText('猜猜我是谁:send by python','plain','utf-8')smtp_server ='smtp.qq.com'from_addr ='FF@foxmail.com'to_addrs = ['FF@foxmail.com','XX@qq.com','XX@qq.com']msg['From'] = Header('阿喵')msg['To'] = Header(",".join(to_addrs))#因为server.sendmail(from_addr, to_addrs, msg.as_string())这个函数里面接收的msg参数只能是字符串(不信你把这行去掉试试),所以我们要把这个列表变成字符串msg['Subject'] = Header('这是一份Python发送的邮件哦,今天刚学的哈哈哈')server = smtplib.SMTP_SSL(smtp_server)server.connect(smtp_server,465)#server = smtplib.SMTP()#server.connect(smtp_server,25)server.login(from_addr,'填你自己的')#授权码要选最新的server.sendmail(from_addr, to_addrs, msg.as_string())server.quit()12345678910111213141516171819202122232425

提一个:

这里可以做一些安全方面的优化,虽然说也没啥人要拿咱的这个代码,但是好的习惯要从小抓起。

在我刚开始学编程,做的第一个项目的时候,老师就跟我们说,这个项目的密码要做成密文的,让用户输入,不能让别看到。

那么这段代码中有什么问题呢?

1、我们的账号都是公开的(虽然上面是伪代码)

2、我们的授权码也是公开的

3、我们的代码复用程度低,可用性低(这就涉及到第二个方法了)

解决前两个问题的方法也很简单,input就好了。

不过那个列表呢?怎么办嘞?

while循环!!

to_addrs = []whileTrue:    a=input('请输入收件人邮箱:')#输入收件人邮箱to_addrs.append(a)#写入列表b=input('是否继续输入,n退出,任意键继续:')#询问是否继续输入ifb =='n':break12345678910

提高代码可复用性与可用性

什么叫代码可复用性呢?就是你这个代码,今天我要群发这五个人,可以,明天我要群发另外六个人呢?怎么办?进去改代码。

如果到了要改代码这一步,那这个代码的可复用性设计也就太差了。

那什么叫代码可用性呢?请问你写的东西是给会写代码的人玩吗?那还是上面那个问题,她要是想换几个人群发那怎么办?哪天想多给一个人发,哪天想少给一个人发,怎么办?

不好用呐,她不会啊。

那怎么办?

还记得我们之前操作Excel的模块吗?对头,自己试一下吧。

告白气球

上面讲的比较认真些,带着大家一步一步做,接下来大家自己来看一段代码,看看能看懂多少,看不懂的可以百度,也可以加入我们的小圈子来和大家一起聊聊,q圈号930900780

我画了个圈,欢迎大家来我们的小圈子

importturtleimporttime# 画心形圆弧defchage_angle():foriinrange(200):        turtle.right(1)        turtle.forward(2);defmove_position(x,y):turtle.hideturtle()# 隐藏画笔(先)turtle.up()# 提笔turtle.goto(x,y)# 移动画笔到指定起始坐标(窗口中心为0,0)turtle.down()# 下笔turtle.showturtle()# 显示画笔love = input("请输入表白语: ")signature = input("请输入签名: ")iflove =='':    love ="I LOVE YOU"turtle.setup(width=800, height=500)# 窗口(画布)大小turtle.color('red','pink')# 画笔颜色turtle.pensize(3)# 画笔粗细turtle.speed(1)# 描绘速度# 初始化画笔起始坐标move_position(x=0,y=-180)# 移动画笔位置turtle.left(140)# 向左旋转140度turtle.begin_fill()# 标记背景填充位置# 画心形直线( 左下方 )turtle.forward(224)# 向前移动画笔,长度为224# 画爱心圆弧chage_angle()# 左侧圆弧turtle.left(120)# 调整画笔角度chage_angle()# 右侧圆弧# 画心形直线( 右下方 )turtle.forward(224)turtle.end_fill()# 标记背景填充结束位置# 在心形中写上表白话语move_position(0,20)# 表白语位置turtle.hideturtle()# 隐藏画笔turtle.color('#CD5C5C','pink')# 字体颜色# font:设定字体、尺寸(电脑下存在的字体都可设置)turtle.write(love, font=('Arial',30,'bold'), align='center')# 签写署名ifsignature !='':    turtle.color('red','pink')    time.sleep(2)    move_position(180,-180)    turtle.hideturtle()# 隐藏画笔turtle.write(signature, font=('Arial',20), align="left")# 点击窗口关闭程序window = turtle.Screen()window.exitonclick()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061

我看看能不能加视频啊

那没办法咯,不是我不加视频

可以自己去试试看哦

最后多说一句,想学习Python可联系小编,这里有我自己整理的整套python学习资料和路线,想要这些资料的都可以进q裙930900780领取。

本文章素材来源于网络,如有侵权请联系删除。

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