最近突然想要干些什么,就把以前学的Python拿了出来玩一玩, 上网找了一些好玩的程序,发现有一篇文章写如何在Linux系统开机拍照并发送给邮箱, 就想着在windows上也实现一下.
首先分析一下流程: 开机自启动->拍照->发送邮件->退出
第一步: 配置windows下的python代码开机自启动
我搜索了好一阵子才找到一篇文章和此有关
https://blog.csdn.net/wickedvalley/article/details/80099566
特此感谢此博主.
代码:
import win32api
import win32con
class AutoRun():
def __init__(self):
name = 'Test' # 要添加的启动项名称
AutoPath = 'D:\\GetImage.exe' # 要添加的exe路径
# 注册表项名
KeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
# 异常处理
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)
except:
print('添加失败')
print('添加成功!')
if __name__=='__main__':
auto=AutoRun(); #引用启动项
第二步: 拍照:
此功能需要用到open-python的功能,我们在控制台中用pip安装一下opencv
pip install opencv-python
然后使用代码拍照:
import cv2
def GetPicture(): #拍照
cap = cv2.VideoCapture(0)
ret,frame = cap.read()
cv2.imwrite('D:\\person.jpg',frame)
cap.release
此代码将会拍照并放置在D盘中
第三步: 发送邮件:
关于只用邮箱发送邮件的功能我也参考了以为博主:
https://www.cnblogs.com/zhongfengshan/p/9763366.html
特此感谢此博主, 各位可以参考他的关于发送邮件的文章.
关于邮箱的登录密码,由于算是第三方客户端,所有我们需要使用授权码,关于QQ邮箱的授权码,有链接:
https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
下面贴上全部代码:
'''
本文件设计于获取开机后的照片
流程:复制到电脑后打开软件,然后会收到测试邮件,下次开机后将自动打开该软件,并获取照片
发送到指定邮箱
'''
import cv2
import smtplib
import sys
import os
import time
import win32api
import win32con
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
host = "smtp.qq.com" #发服务器接口
port = 25 #端口号
sender = "xxxxxxxx@qq.com" #消息发送方
pwd = "xxxxxxxx" #授权码
receiver = "xxxxxx@qq.com" #消息接收方
exit_count = 5 #尝试联网次数
# path = os.getcwd() #获取图片保存路径 返回当前进程的工作目录
path = "D:" #文件路径
# def mkdir(path): #创建文件夹路径
# folder = os.path.exists(path)
# if folder:
# print ("Have Done")
# else:
# os.mkdir(path)
# print ("New Folder")
def GetPicture(): #拍照
cap = cv2.VideoCapture(0)
ret,frame = cap.read()
cv2.imwrite(path+'/person.jpg',frame)
cap.release
def SetMsg(): #邮件格式设置
msg = MIMEMultipart("mixed")
msg['Subject'] = '电脑启动' #标题
msg['From'] = sender
msg['To'] = receiver
#邮件正文
text = "您的电脑已开机!已经为你获取开机照片"
text_plain = MIMEText(text,'plain','utf-8') #正文转码
msg.attach(text_plain)
#构造图片链接
SendImageFile = open(path+'/person.jpg','rb').read()
image = MIMEImage(SendImageFile)
#将收件人看见的附件照片名称改为people.png.
image['Content-Disposition'] = 'attachment; filename = "people.png"'
msg.attach(image)
return msg.as_string()
def SendEmail(msg): #发送邮件
smtp = smtplib.SMTP()
smtp.connect(host)
smtp.login(sender,pwd)
smtp.sendmail(sender,receiver,msg)
time.sleep(2)
smtp.quit()
class AutoRun(): #添加开机启动项
def __init__(self):
name = 'Test' # 要添加的项值名称
AutoPath = path + '\\GetImage.exe' # 要添加的exe路径
# 注册表项名
KeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
# 异常处理
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, AutoPath)
win32api.RegCloseKey(key)
except:
print('添加失败')
print('添加成功!')
# def IsLink(): #判断网络是否连通
# return os.system('ping -c 4 www.baidu.com')
# def main(): #主函数
# reconnect_times = 0
# # while IsLink():
# # time.sleep(10)
# # reconnect_times += 1
# # if reconnect_times == exit_count:
# # sys.exit()
# # time.sleep(10)
# GetPicture()
# msg = SetMsg()
# SendEmail(msg)
if __name__ == '__main__':
# mkdir(path) #先设置路径
auto = AutoRun() #设置开机自启动
GetPicture() #拍照
msg = SetMsg() #设置格式
SendEmail(msg) #发送
也可以去我的Github上寻找我的代码:
https://github.com/shuanghan0922/Python/tree/master/GetImageToEmail
特此感谢为我提供支持的博主