**最新文章会在我的个人网站发布:http://www.xiaokai1999.cn/
**
这个项目在寒假前就做了,因为当时在学校,不管是来窜宿舍的同学或者是自己宿舍里的同学,总会有人对我的电脑产生兴趣,然后偷看我的电脑。于是我就想了个办法,记录那些偷看过我电脑的人。

嘿嘿,接下来就是男生之间的交易了。

大概想法:

实现效果:


语音视频文件展示–>因为视频太短,上传到bilibili并不好,可以移步我的个人博客查看

文章目录

  • 涉及到的知识点:
  • 1.十行Python代码实现人脸识别
    • 啥是Harr特征
    • 啥是Cascade级联分类器
      • Cascade级联分类器的训练方法:Adaboost
      • 将弱分类器聚合成强分类器
      • 级联的含义:需过五关斩六将才能被提取出来
      • OpenCV中的Haar-cascade检测
    • 十行代码完成人脸识别(代码)
  • 2.调用百度api实现语音合成
    • 2.1添加自己的机器人
      • 2.1.1 创建
      • 2.1.2填写
      • 2.1.3 得到APPID,AK,SK
      • 2.1.4 下载官方api
    • 2.2 代码实现语音识别
  • 3.email库的操作方法(主要可以去https://docs.python.org/zh-cn/3/library/email.html查看详细资料)以下给出具体的操作方法
  • 接下来就是源代码时刻(复制粘帖就能用的那种哦)
    • Email_Received.py
    • Email_Send.py
    • main.py
    • 引用:

涉及到的知识点:

1.十行Python代码实现人脸识别

2.调用百度api实现语音合成

3.如何操作email库

1.十行Python代码实现人脸识别

  • 使用基于Haar特征的Cascade级联分类器进行人脸识别(听起来好高大上,但其实原理很简单)

  • 用人脸识别同样的道理,扩展到人眼识别上

  • 用opencv自带的Harr级联分类器进行人脸、人眼与微笑识别

啥是Harr特征

Haar特征包含三种:边缘特征、线性特征、中心特征和对角线特征。每种分类器都从图片中提取出对应的特征。

Harr特征

搜索人脸上的指定特征

比如上图中,横的黑道将人脸中较暗的双眼提取了出来,而竖的白道将人脸中较亮的鼻梁提取了出来。

具体想了解的同学可一曲看看这个大老讲得卷积核,很细

啥是Cascade级联分类器

基于Haar特征的cascade级联分类器是Paul Viola和 Michael Jone在2001年的论文”Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种有效的物体检测方法。

Cascade级联分类器的训练方法:Adaboost

级联分类器的函数是通过大量带人脸不带人脸的图片通过机器学习得到的。对于人脸识别来说,需要几万个特征,通过机器学习找出人脸分类效果最好、错误率最小的特征。训练开始时,所有训练集中的图片具有相同的权重,对于被分类错误的图片,提升权重,重新计算出新的错误率和新的权重。直到错误率或迭代次数达到要求。这种方法叫做Adaboost

在Opencv中可以直接调用级联分类器函数。

将弱分类器聚合成强分类器

最终的分类器是这些弱分类器的加权和。之所以称之为弱分类器是因为每个分类器不能单独分类图片,但是将他们聚集起来就形成了强分类器。论文表明,只需要200个特征的分类器在检测中的精确度达到了95%。最终的分类器大约有6000个特征。(将超过160000个特征减小到6000个,这是非常大的进步了) 。

级联的含义:需过五关斩六将才能被提取出来

事实上,一张图片绝大部分的区域都不是人脸。如果对一张图片的每个角落都提取6000个特征,将会浪费巨量的计算资源。

如果能找到一个简单的方法能够检测某个窗口是不是人脸区域,如果该窗口不是人脸区域,那么就只看一眼便直接跳过,也就不用进行后续处理了,这样就能集中精力判别那些可能是人脸的区域。
为此,有人引入了Cascade 分类器。它不是将6000个特征都用在一个窗口,而是将特征分为不同的阶段,然后一个阶段一个阶段的应用这些特征(通常情况下,前几个阶段只有很少量的特征)。如果窗口在第一个阶段就检测失败了,那么就直接舍弃它,无需考虑剩下的特征。如果检测通过,则考虑第二阶段的特征并继续处理。如果所有阶段的都通过了,那么这个窗口就是人脸区域。
作者的检测器将6000+的特征分为了38个阶段,前五个阶段分别有1,10,25,25,50个特征(前文图中提到的识别眼睛和鼻梁的两个特征实际上是Adaboost中得到的最好的两个特征)。根据作者所述,平均每个子窗口只需要使用6000+个特征中的10个左右。

OpenCV中的Haar-cascade检测

OpenCV 既可以作为检测器也可以进行机器学习训练。如果你打算训练自己的分类器识别任意的物品,比如车,飞机,咖啡杯等。你可以用OpenCV 创造一个。完整的细节在:Cascade Classifier Training¶中。

下面给出调用OpenCV进行基于Haar特征的人脸和人眼Cascade级联分类器的源代码。

十行代码完成人脸识别(代码)

# 导入opencv-python
import cv2# 读入一张图片,引号里为图片的路径,需要你自己手动设置
img = cv2.imread('image1.jpg',1)# 导入人脸级联分类器引擎,'.xml'文件里包含训练出来的人脸特征
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
# 用人脸级联分类器引擎进行人脸识别,返回的faces为人脸坐标列表,1.3是放大比例,5是重复识别次数
faces = face_engine.detectMultiScale(img,scaleFactor=1.3,minNeighbors=5)# 对每一张脸,进行如下操作
for (x,y,w,h) in faces:# 画出人脸框,蓝色(BGR色彩体系),画笔宽度为2img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)# 在"img2"窗口中展示效果图
cv2.imshow('img2',img)
# 监听键盘上任何按键,如有按键即退出并关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('output.jpg',img)


上文引用自:https://www.jianshu.com/p/ea3c57b6c5e1

2.调用百度api实现语音合成

有些人可能会问,为什么不自己写一个,而去用百度api呢?
我的回答:免费的干嘛不用,非要去自己造轮子,
效率太低\color{red}{效率太低}效率太低

  • 目前百度api的语音合成是免费的,每天也没有限制,想怎么用怎么用。

2.1添加自己的机器人

没有百度帐号的可以先创建一个帐号(话说现在还有谁没有无良商家的帐号呢,狗头保命)
我可是 超级会员\color{red}{超级会员}超级会员,可是下载速度依旧只有100k/s,100M的网速被疯狂压榨
好,回归正题。

2.1.1 创建

2.1.2填写

2.1.3 得到APPID,AK,SK

2.1.4 下载官方api

支持Python版本:2.7.+ ,3.+

安装使用Python SDK有如下方式:

如果已安装pip,执行pip install baidu-aip即可。
如果已安装setuptools,执行python setup.py install即可。

2.2 代码实现语音识别

'''baidu.py'''
from aip import AipSpeech
import os
import playsound
""" 你的 APPID AK SK """
"""填入上面获取到的3个字符串"""
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)# 语音播报 我这边用到了 vlc播放器,大家也可以尝试别的方法
def play_audio():path = os.getcwd()commend = "cvlc " + path +"/myGetAudio.wav vlc://quit" os.system(commend)# playsound("ffmpeg myGetAudio.wav")print("语音播放完成")# 合成音频
def hecheng_audio(msg):result = client.synthesis(msg, 'zh', 1, {'vol': 5,'per': 3})print("完成")# 识别正确返回语音二进制 错误则返回dict 参照下面错误码if not isinstance(result, dict):with open('myGetAudio.wav', 'wb') as f:f.write(result)f.close()print("语音接受完成")play_audio()

3.email库的操作方法(主要可以去https://docs.python.org/zh-cn/3/library/email.html查看详细资料)以下给出具体的操作方法

   '''@author:JackyMao'''#------------------------------------------------------------------------------------------------import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerimport os,time,redef send_Test_email(mail_to):'''本模块实现获取最新的测试报告html文件,读取部分报告内容作为邮件正文,将报告作为附件,并发送到指定的邮箱,参数mail_to代表的是接收邮箱,例如:'xxx@163.com' '''#发送邮箱mail_from = 'yyy@163.com'#发送邮件主题mail_subject = 'Automation Test Report'#发送邮箱服务器mail_smtpserver = 'smtp.163.com'#发送邮箱用户/密码mail_username = 'yyy@163.com'mail_password = 'yyyyyy'#定义邮件内容,中文需参数‘utf-8’,单字节字符不需要'''#发送文件形式的邮件msg = MIMEText('你好!','text','utf-8')''''''#发送html形式以正常文本显示在邮件内容中的邮件msg = MIMEText('<html><h1>你好!</h1></html>','html','utf-8')''''''#读取html文件内容并发送f=open(file_new,'rb')mail_body=f.read()f.close()print mail_bodymsg=MIMEText(mail_body,_subtype='html',_charset='utf-8')'''#创建一个带附件的邮件实例(内容)msg = MIMEMultipart()#找到report目录下最新生成的报告文件供后续使用result_dir = 'D:\\report'lists=os.listdir(result_dir)lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn) if notos.path.isdir(result_dir+"\\"+fn) else 0)print (u'The Latest Test Report is: '+lists[-1])file_new = os.path.join(result_dir,lists[-1])#读取最新的测试报告文件获取部分信息来定义邮件的内容Regex_Theme=re.compile(r'Automation Test Report')Regex_Content=re.compile(r'<strong>(.*:)</strong>(.*)<')Report_File=open(file_new,'r')Mail_Content=[]for line in Report_File.readlines():if '<title>Automation Test Report</title>' in line or "<p class='attribute'>" in line:i=Regex_Theme.findall(line)j=Regex_Content.findall(line)if i != []:Mail_Content.append(i)if j != []:Mail_Content.append(j)Report_File.close()#将读取到的测试报告的数据以html形式显示为邮件的中文msgTest=MIMEText('''<html><h1>Test completed,Test results are as follows:</h1></html>''''''<hr />''''''<p><strong>'''+Mail_Content[0][0]+'''</strong></p>''''''<p><strong>'''+Mail_Content[1][0][0]+'''</strong>'''+Mail_Content[1][0][1]+'''</p>''''''<p><strong>'''+Mail_Content[2][0][0]+'''</strong>'''+Mail_Content[2][0][1]+'''</p>''''''<p><strong>'''+Mail_Content[3][0][0]+'''</strong>'''+Mail_Content[3][0][1]+'''</p>''''''<hr />''''''<p>PS: Detailed test results please refer to the attachment</p>''','html','utf-8')msg.attach(msgTest)#定义邮件的附件att1 = MIMEText(open(file_new, 'rb').read(), 'base64', 'utf-8')att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] ='attachment; filename="Automation test report.html"'#这里的filename指的是附件的名称及类型msg.attach(att1)#将邮件的主题等相关信息添加到邮件实例msg['Subject'] = Header(mail_subject)msg['From'] = mail_frommsg['To'] = mail_tomsg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z') #创建发送服务器实例并将发送服务器添加到实例中smtp = smtplib.SMTP()smtp.connect(mail_smtpserver)'''#采用ssl加密传输smtp.ehlo()smtp.starttls()smtp.ehlo()''''''#打印交互的日志信息#smtp.set_debuglevel(1)'''#登录发送邮件服务器并进行邮件的发送smtp.login(mail_username, mail_password)smtp.sendmail(mail_from, mail_to, msg.as_string())print u'Test report sent successfully,Please go to the following email to check the test report :%s' %mail_tosmtp.quit()#----------------------------------------------------------------------------------------------------if __name__ == "__main__":send_Test_email('xxx@126.com')当然,如果要使用email模块的其他功能,可以参考网上的以下7个列子:一,文件形式的邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.text import MIMETextfrom email.header import Headersender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***'msg = MIMEText('你好','text','utf-8')#中文需参数‘utf-8',单字节字符不需要msg['Subject'] = Header(subject, 'utf-8')smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.login(username, password)smtp.sendmail(sender, receiver, msg.as_string())smtp.quit()二、html形式的邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.text import MIMETextsender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***'msg = MIMEText('</pre><h1>你好</h1><pre>','html','utf-8') msg['Subject'] = subject smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.login(username, password)smtp.sendmail(sender, receiver, msg.as_string())smtp.quit()三、带图片的html邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImage sender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***' msgRoot = MIMEMultipart('related')msgRoot['Subject'] = 'test message' msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!','html','utf-8')msgRoot.attach(msgText) fp = open('h:\\python\\1.jpg', 'rb')msgImage = MIMEImage(fp.read())fp.close() msgImage.add_header('Content-ID', '')msgRoot.attach(msgImage) smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.login(username, password)smtp.sendmail(sender, receiver, msgRoot.as_string())smtp.quit()四、带附件的邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImage sender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***' msgRoot = MIMEMultipart('related')msgRoot['Subject'] = 'test message' #构造附件att = MIMEText(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'att["Content-Disposition"] = 'attachment; filename="1.jpg"'msgRoot.attach(att) smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.login(username, password)smtp.sendmail(sender, receiver, msgRoot.as_string())smtp.quit()五、群邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.text import MIMEText sender = '***'receiver = ['***','****',……]subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***' msg = MIMEText('你好','text','utf-8') msg['Subject'] = subject smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.login(username, password)smtp.sendmail(sender, receiver, msg.as_string())smtp.quit()六、包含各种元素的邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImage sender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***' # Create message container - the correct MIME type is multipart/alternative.msg = MIMEMultipart('alternative')msg['Subject'] = "Link" # Create the body of the message (a plain-text and an HTML version).text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"html = """\Hi!How are you?Here is the <a href="http://www.python.org">link</a> you wanted.""" # Record the MIME types of both parts - text/plain and text/html.part1 = MIMEText(text, 'plain')part2 = MIMEText(html, 'html') # Attach parts into message container.# According to RFC 2046, the last part of a multipart message, in this case# the HTML message, is best and preferred.msg.attach(part1)msg.attach(part2)#构造附件att = MIMEText(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'att["Content-Disposition"] = 'attachment; filename="1.jpg"'msg.attach(att) smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.login(username, password)smtp.sendmail(sender, receiver, msg.as_string())smtp.quit()7、基于ssl的邮件#!/usr/bin/env python3#coding: utf-8import smtplibfrom email.mime.text import MIMETextfrom email.header import Headersender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***' msg = MIMEText('你好','text','utf-8')#中文需参数‘utf-8',单字节字符不需要msg['Subject'] = Header(subject, 'utf-8') smtp = smtplib.SMTP()smtp.connect('smtp.163.com')smtp.ehlo()smtp.starttls()smtp.ehlo()smtp.set_debuglevel(1)smtp.login(username, password)smtp.sendmail(sender, receiver, msg.as_string())smtp.quit()

接下来就是源代码时刻(复制粘帖就能用的那种哦)

注意:博主用的是163和qq,其他邮箱还得看官方的介绍来引入\color{blue}{注意:博主用的是163和qq,其他邮箱还得看官方的介绍来引入}注意:博主用的是163和qq,其他邮箱还得看官方的介绍来引入

Email_Received.py

'''Email_Received.py'''
# pop3
import poplib
# 邮箱标题文本
from email.header import decode_header
# 邮箱分析器
from email.parser import Parser
# 用来解析邮件来源
from email.utils import parseaddr# 邮件接收类
class Email_Received:def __init__(self,usercount,password,pop3_url):self.usercount = usercount # 用户的账户self.password = password # 用户的密码self.pop3_sever = poplib.POP3(pop3_url)# pop3服务器为163def conect_pop(self):self.pop3_sever.user(self.usercount)# 验证账号self.pop3_sever.pass_(self.password)# 验证密码def get_length(self):rsp, msg_list, rsp_siz = self.pop3_sever.list()# 获取当前邮箱邮件数,为字节型return len(msg_list)def get_latest_email(self):self.pop3_sever.set_debuglevel(1)# set_debuglevel()参数为1,后面的函数会输出信息#print(self.pop3_sever.getwelcome().decode('utf8'))# 获取邮箱欢迎语句rsp, msg_list, rsp_siz = self.pop3_sever.list()# 获取当前邮件数self.nowcount = len(msg_list)rsp, msglines, msgsiz = self.pop3_sever.retr(len(msg_list))# 获取邮件信息#print(msglines)msg_content = b'\r\n'.join(msglines).decode('gbk')#print(msg_content)msg = Parser().parsestr(text=msg_content)#分析邮件信息self.msg = msgdef get_email_title(self):subject = self.msg['Subject']value, charset = decode_header(subject)[0]if charset:value = value.decode(charset)# print('邮件主题: {0}'.format(value))self.email_title = value#print(value)def get_sender_info(self):hdr, addr = parseaddr(self.msg['From'])# name 发送人邮箱名称, addr 发送人邮箱地址name, charset = decode_header(hdr)[0]if charset:name = name.decode(charset)self.sender_name = nameself.sender_email = addr#print('发送人邮箱名称: {0}'.format(name))#print('发送人邮箱名称: {0},发送人邮箱地址: {1}'.format(name, addr))def get_email(self):self.get_latest_email()self.get_email_title()self.get_sender_info()return self.email_title,self.sender_name,self.sender_email,self.nowcountdef close(self):self.pop3_sever.quit()

Email_Send.py

'''Email_Send.py'''
# 邮箱标题文本
from email.header import Header
# 邮箱内容多项目
from email.mime.multipart import MIMEMultipart
# 邮箱内容文本
from email.mime.text import MIMEText
# 邮箱内容图片
from email.mime.image import MIMEImage
# SMTP
import smtplib
# 邮件发送类
class Email_Send:# 用来初始化类的函数def __init__(self, from_addr, to_addr, password,smtp_url):self.from_addr = from_addr  # 寄邮件的邮箱地址self.to_addr = to_addr  # 收邮件的邮箱地址self.password = password  # 寄邮件的允许密码,不是登陆密码self.smtp = smtplib.SMTP(smtp_url)  # 确定SMTP的服务器是163def msg_stmp(self, sendname, minetext, subject):msg = MIMEMultipart('mixed')  # 新建一个多项的邮件处理变量msg['From'] = sendname + '<' + self.from_addr + '>'  # 发送人的邮箱msg['To'] = self.to_addr  # 接收人的邮箱msg['Subject'] = Header(subject, 'utf-8')  # 标题文本text = MIMEText(minetext, 'plain', 'utf-8')  # 主要文本内容msg.attach(text)  # 添加文本进多项的邮件处理image = open('1.png', 'rb').read()mineimage = MIMEImage(image)  # 要发送邮件的图片mineimage['Content-Disposition'] = 'attachment; filename = "people.png"'msg.attach(mineimage)return msg# 发送信息def sendmessage(self, sendname, minetext, subject):self.smtp.sendmail(self.from_addr, self.to_addr, self.msg_stmp(sendname, minetext, subject).as_string())  # 发送邮件# 登录邮箱def start_stmp(self):self.smtp.login(self.from_addr, self.password)# 退出邮箱def stop_stmp(self):self.smtp.quit()

main.py

'''main.py'''
from Email_Send import Email_Send
from Email_Received import Email_Received
# opencv
import cv2
# 延时函数
from time import sleep
# 操作系统
import os
# 接入百度api
import baidudef find_face(path):face_patterns = cv2.CascadeClassifier(path+"/haarshare/haarcascade_frontalface_default.xml")eye_patterns = cv2.CascadeClassifier(path+"/haarshare/haarcascade_eye.xml")cap = cv2.VideoCapture(0)while True:rep,frame = cap.read()faces = face_patterns.detectMultiScale(frame,scaleFactor=1.3,minNeighbors=5)for (x,y,w,h) in faces:cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)face_area = frame[y:y+h,x:x+w]eyes = eye_patterns.detectMultiScale(face_area)for (ex,ey,ew,eh) in eyes:cv2.rectangle(frame,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(255,0,0),2)cv2.imwrite(path+"/1.png",frame)if len(faces)>=1:return 1,len(faces)# opencv 打开摄像头
def open_camera(path):cap = cv2.VideoCapture(0)ret, frame = cap.read()sleep(0.5)cv2.imwrite(path+'/1.png',frame)cap.release()if __name__ == '__main__':path  = os.getcwd()smtp_url = {'163': 'smtp.163.com'}pop3_url = {'163': 'pop.163.com'}from_addr = "xxx@163.com"password = "xxx"to_addr = "xxx@qq.com"email_title = ''sender_name = ''sender_email = ''msg=''count = 0nowcount = 0email_received = Email_Received(from_addr, password,pop3_url['163'])email_received.conect_pop()count = email_received.get_length()email_received.close()while True:email_received = Email_Received(from_addr, password, pop3_url['163'])email_received.conect_pop()email_title,sender_name,sender_email,nowcount = email_received.get_email()sleep(2)print('nowcount={0},count={1}'.format(nowcount,count))if  nowcount > count:if "(你发送文件用的用户名)" in sender_email:if email_title=='1':open_camera(path)email_send = Email_Send(from_addr, to_addr, password,smtp_url['163'])email_send.start_stmp()email_send.sendmessage('Mao','电脑拍摄','请接受你的图片')email_send.stop_stmp()count = nowcountprint("发送成功")# 语音警报if "2:" in email_title:baidu.hecheng_audio(email_title[2:])count = nowcountif "3:" in email_title:counts = int(email_title[2:])# open the haarcascadefor i in range(counts):flag, faces_counts = find_face(path)if flag == 1:email_send = Email_Send(from_addr, to_addr, password,smtp_url['163'])email_send.start_stmp()email_send.sendmessage('Mao','人脸检测',"一共检测到{0}个人再看你的电脑".format(faces_counts))email_send.stop_stmp()count = nowcountprint("发送成功")email_received.close()

如要转载请说明出处:https://blog.csdn.net/xiaokai1999/article/details/105690965

引用:

[1]https://www.jianshu.com/p/ea3c57b6c5e1
[2]https://blog.csdn.net/freesigefei/article/details/51313155

[Python趣味应用]总有人想偷看你电脑?留下证据后办他~~相关推荐

  1. 工作中总有人想和你抬杠该怎么解决?

    在职场中我们会碰到各式各样的人,有可能对方是自己的贵人,也有可能是暗藏在我们身边的小人,在无论什么样的人,会发现有些人总和你较真和你抬杠,无论你说的好还是坏,他就是喜欢跟你抬杠,工作中总有人想和你抬杠 ...

  2. 是什么让Redis“气急败坏”回击:13年来,总有人想替Redis换套新架构!

    来源:InfoQ.整理 | 钰莹.Tina 回击就代表输了?! 今年年中,一位前谷歌.前亚马逊的工程师推出了他创作的开源内存数据缓存系统 Dragonfly,用 C/C++ 编写,基于 BSL 许可( ...

  3. 总有人会偷看你的朋友圈

    全世界只有3.14 % 的人关注了 爆炸吧知识 生活中,总是会有人在默默关注着你. 你的朋友圈,常常有人来"偷偷"光顾,而这些细枝末节常常被我们忽视. 你不想让关心你的人失望,于是 ...

  4. python趣味编程表白_【暖心一笑】Python趣味编程:定时给Ta讲笑话

    原标题:[暖心一笑]Python趣味编程:定时给Ta讲笑话 大四的生活就是这么无聊,我琢磨着也学了这么多东西了,为啥不能用自己的知识来给生活找点乐子呢?我想反正每天都要给Ta问候一声早安,为何不同时讲 ...

  5. python录入学生信息网_干货满满 | Python趣味编程教学实践

    Python趣味编程教学实践 近几年间,Python 的火热有目共睹,在IEEE Spectrum 2020 编程语言 Top 10排行榜中,Python位居第一.这是因为Python 与人工智能.机 ...

  6. 六 Python 自学进阶,如果想要打牢基础,应该收藏它

    目录 1 前言 2 最简单的输入 3 数据类型的进阶 4 列表 5 元祖 6 字典 7 集合 8 语法结构的进阶 9 异常捕获 10 能打破循环的 break 和 continue 11 迭代的概念, ...

  7. 《Python趣味创意编程》新书上架了

    <Python趣味创意编程>案例视频 <Python趣味创意编程>新书上架,目前京东.淘宝.当当上搜书名就可以找到,比如: https://item.jd.com/130745 ...

  8. 第12章 粒子同心圆(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现粒子同心圆,如图所示.首先学习面向对象编程的知识,为粒子类添加成员变量与成员函数:然后实现一个面向对象版本的运动粒子 ...

  9. 北京python程序员求职_想找python程序员的工作,但发现稍微好点的职位都集中在北京。我非常想当python程序员,北京值得去吗?...

    想当Python程序员,北京值得去吗?你也知道北京的人口多.环境污染很严重,房价也高得离谱,交通拥挤.但每天照样有无数人从外地往北京跑,也有无数人从北京离开.所以,还是先来看看去北上广深一类大城市工作 ...

  10. python趣味编程100例-儿童Python趣味编程课程

    儿童Python趣味编程课程 南京杜恩培训隶属于南京卡尔威特教育咨询有限公司,秉承"以人为本"的办学宗旨,致力于给每一位前来学习的学员专业优质的服务.中心成立于2002年,在南京已 ...

最新文章

  1. Oracle日期相关
  2. 软件测试成功之本:项目风险的监控
  3. No module named 'oscar.apps.promotions'
  4. 使用.NET5、Blazor和Electron.NET构建跨平台桌面应用
  5. 《从入门到精通云服务器》-4
  6. bzoj2818: Gcd
  7. QQ新版表情序号及对应
  8. 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析
  9. 基于E-Mail的隐蔽控制:机理与防御
  10. Paraphrasing effectively 有效转述你需要了解这些内容~
  11. Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx)
  12. 网易云音乐歌单或歌曲封面提取
  13. ORA-12154: TNS: 无法解析指定的连接“/one card”应用程序中的服务器错误
  14. 怎么在PDF上直接修改?最新教程来了
  15. 手把手带你打造自己的UI样式库(第三章)之常用样式组件的设计与开发
  16. java开发常用注解汇总
  17. 控件不能正确注册错误
  18. 与构架有关的几个基本概念
  19. 适合环保工程行业的项目管理软件
  20. 发那科机器人零点找回_「发那科」FANUC机器人零点复归详解

热门文章

  1. chm无法打开html文档,高手几招搞定WindowsXP无法打开chm文件的情况
  2. package.json文件^和~区别
  3. 平行四边形图案c语言,使用scratch绘制各种图案-平行四边形【解说】
  4. 写一个京东最顶部的导航条
  5. 不下心删了线上环境mysql数据库数据,辛亏有惊无险
  6. 电脑如何进入bios
  7. java中case怎么用,Java中case使用示例,Javacase使用示例,switch([vari
  8. 想要快速、免费的翻译外文PDF文档?Get翻译神器
  9. python查询46级成绩
  10. DASH Nginx Webrtc Quic学习资料超链