需求:html
一、調用筆記本的攝像頭,拍攝筆記本面前的照片;
二、將照片發送給指定郵箱;
三、發送郵件,提醒咱們電腦已經開機,並附上筆記本拍攝的照片。python
面向過程:服務器
#!/user/bin env python # author:Simple-Sir # time:2019/9/17 9:46 # 一、調用筆記本的攝像頭,拍攝筆記本面前的照片; # 二、將照片發送給指定郵箱; # 三、發送郵件,提醒咱們電腦已經開機,並附上筆記本拍攝的照片。 ''' MIMEMultipart類型 MIME郵件中各類不一樣類型的內容是分段存儲的,各個段的排列方式、位置信息都經過Content-Type域的multipart類型來定義。 multipart類型主要有三種子類型:mixed、alternative、related。 mixed 附件 alternative 純文本和超文本內容 related 內嵌資源(好比:在發送html格式的郵件內容時,可能使用圖像做爲 html的背景,html文本會被存儲在alternative段中,而做爲背景的圖像則會存儲在related類型定義的段中。 ''' import cv2,smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage sender = 'xxxxxx@qq.com' # 發件人 receivers = 'xxxxx@qq.com' # 收件人 pw = '*****' # 三方客戶端登陸郵箱受權碼 subject='電腦已啓動拍照併發送' # 郵件主題 text = '您好,您的電腦已開機,並拍攝了以下照片:' # 郵件正文 # 打開攝像頭並拍照 cap = cv2.VideoCapture(0) # 0 表示打開筆記本的內置攝像頭(若參數是視頻文件路徑則打開視頻) # 按幀讀取圖片或視頻 # ret,frame是獲cap.read()方法的兩個返回值。 # 其中ret是布爾值,若是讀取幀是正確的則返回True,若是文件讀取到結尾,它的返回值就爲False。 # frame就是每一幀的圖像,是個三維矩陣。 ret,frame = cap.read() # 按幀讀取圖片 cv2.imwrite('p1.jpg',frame) # 保存圖像 cap.release() # 釋放(關閉)攝像頭 msg = MIMEMultipart('mixed') # 定義含有附件類型的郵件 msg['Subject'] = subject # 郵件主題 msg['From'] = sender # 發件人 msg['To'] = receivers # 收件人 # MIMEText三個參數:第一個爲文本內容,第二個 plain 設置文本格式,第三個 utf-8 設置編碼 text = MIMEText(text,'plain','utf-8') # 構造一個文本郵件對象, plain 原格式輸出; html html格式輸出 msg.attach(text) # 將文本內容添加到郵件中 sendImg = open('p1.jpg','rb').read() # 讀取剛纔拍攝的照片 img = MIMEImage(sendImg) # 構造一個照片附件對象 img['Content-Disposition'] = 'attachment; filename="login.jpg"' # 指定下載的文件類型未:附件,默認下載附件名爲:login.jpg msg.attach(img) # 將附件添加到郵件中 msg_tsr = msg.as_string() # 將msg對象變爲str # 發送郵件 try: smtp = smtplib.SMTP() # 定義一個SMTP(傳輸協議)對象 smtp.connect('smtp.qq.com',25) # 鏈接到郵件發送服務器,默認25端口 smtp.login(sender,pw) # 使用發件人郵件及受權碼登錄 smtp.sendmail(sender,sender,msg_tsr) # 發送郵件 smtp.quit() # 關閉郵箱,退出登錄 except Exception as e: print('\033[31;1m出錯了:%s\033[0m' % (e)) else: print('郵件發送成功!')
面向對象:併發
#!/user/bin env python # author:Simple-Sir # time:2019/9/17 9:46 # 一、調用筆記本的攝像頭,拍攝筆記本面前的照片; # 二、將照片發送給指定郵箱; # 三、發送郵件,提醒咱們電腦已經開機,並附上筆記本拍攝的照片。 ''' MIMEMultipart類型 MIME郵件中各類不一樣類型的內容是分段存儲的,各個段的排列方式、位置信息都經過Content-Type域的multipart類型來定義。 multipart類型主要有三種子類型:mixed、alternative、related。 mixed 附件 alternative 純文本和超文本內容 related 內嵌資源(好比:在發送html格式的郵件內容時,可能使用圖像做爲 html的背景,html文本會被存儲在alternative段中,而做爲背景的圖像則會存儲在related類型定義的段中。 ''' import cv2,smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage class TakePhotoAndSendmsg(object): ''' 一、調用筆記本的攝像頭,拍攝筆記本面前的照片; 二、將照片發送給指定郵箱; 三、發送郵件,提醒咱們電腦已經開機,並附上筆記本拍攝的照片。 ''' def __init__(self): self.sender = '494413379@qq.com' # 發件人 self.receivers = '2278740988@qq.com' # 收件人 self.pw = 'emnjshnyuofybjji' # 三方客戶端登陸郵箱受權碼 self.subject='電腦已啓動拍照併發送' # 郵件主題 self.text = '您好,您的電腦已開機,並拍攝了以下照片:' # 郵件正文 def takePhoto(self): '拍照' # 打開攝像頭並拍照 cap = cv2.VideoCapture(0) # 0 表示打開筆記本的內置攝像頭(若參數是視頻文件路徑則打開視頻) # 按幀讀取圖片或視頻 # ret,frame是獲cap.read()方法的兩個返回值。 # 其中ret是布爾值,若是讀取幀是正確的則返回True,若是文件讀取到結尾,它的返回值就爲False。 # frame就是每一幀的圖像,是個三維矩陣。 ret,frame = cap.read() # 按幀讀取圖片 cv2.imwrite('p1.jpg',frame) # 保存圖像 cap.release() # 釋放(關閉)攝像頭 def writeMsg(self): '寫郵件' msg = MIMEMultipart('mixed') # 定義含有附件類型的郵件 msg['Subject'] = self.subject # 郵件主題 msg['From'] = self.sender # 發件人 msg['To'] = self.receivers # 收件人 # MIMEText三個參數:第一個爲文本內容,第二個 plain 設置文本格式,第三個 utf-8 設置編碼 text = MIMEText(self.text,'plain','utf-8') # 構造一個文本郵件對象, plain 原格式輸出; html html格式輸出 msg.attach(text) # 將文本內容添加到郵件中 sendImg = open('p1.jpg','rb').read() # 讀取剛纔拍攝的照片 img = MIMEImage(sendImg) # 構造一個照片附件對象 img['Content-Disposition'] = 'attachment; filename="login.jpg"' # 指定下載的文件類型未:附件,默認下載附件名爲:login.jpg msg.attach(img) # 將附件添加到郵件中 msg_tsr = msg.as_string() # 將msg對象變爲str return msg_tsr def sendMsg(self,msg): # 發送郵件 smtp = smtplib.SMTP() # 定義一個SMTP(傳輸協議)對象 smtp.connect('smtp.qq.com',25) # 鏈接到郵件發送服務器,默認25端口 smtp.login(self.sender,self.pw) # 使用發件人郵件及受權碼登錄 smtp.sendmail(self.sender,self.sender,msg) # 發送郵件 smtp.quit() # 關閉郵箱,退出登錄 if __name__ == '__main__': ts = TakePhotoAndSendmsg() ts.takePhoto() msg = ts.writeMsg() try: ts.sendMsg(msg) except Exception as e: print('\033[31;1m出錯了:%s\033[0m'%(e)) else: print('郵件發送成功!')
兩種方式執行效果同樣:ide
將如下批處理語句保存爲.bat文件,並放入windos開機啓動目錄:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUpui
@echo off ping -n 300 localhost > null # 300s以後執行後續代碼 cd /d E:\python\LZH_CODE\lhy\practice # 進入takePhoto.py的文件夾 python takePhoto.py # 執行py文件
截圖以下:編碼
另,在使用smtplib庫發送郵件,須要郵箱客戶端受權密碼。默認是關閉的,點擊開啓,會提示獲取受權碼!spa
設置 --> 帳戶code