python SMTP 摄像头拍摄图片发送邮件

功能说明

  • 每隔一定时间使用摄像头拍摄照片
  • 将拍摄的照片保存至本地
  • 通过电子邮件,将照片发送至QQ邮箱

实现思路

  • 拍摄照片:使用opencv拍摄
  • 发送电子邮件:使用SMTP,QQ邮箱需要开启SMTP功能,如下图(请自行百度)
  • 将图片嵌入html中,作为邮件内容发送
  • 获取系统时间进行判断,到达预设时间后执行拍摄以及发送函数
    在这里插入图片描述

示例代码

#!/usr/bin/env python3
# coding: utf-8

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
import cv2


def get_picture(cur_tiem):
    
    cap = cv2.VideoCapture(0)  # 计算机自带的摄像头为0,外部设备为1
    ret, frame = cap.read()  # ret:True/False,代表有没有读到图片  frame:当前截取一帧的图片
    # cv2.imshow("capture",.jpg frame)
    filename = './pic/' + cur_tiem + '.jpg'
    cv2.imwrite(filename, frame)
    cap.release()
    # cv2.destroyAllWindows()
    return frame


def send_mail(cur_tiem):

    sender = '180*****1@qq.com'
    receiver = '180*****1@qq.com'
    subject = 'Picture by the dormitory camera'
    smtpserver = 'smtp.qq.com'
    username = '180*****1@qq.com'
    password = "rkru********ifb"

    msgRoot = MIMEMultipart('related')
    msgRoot['From'] = Header('your name')   # 邮件发送者名字
    msgRoot['To'] = Header('your name')   # 邮件接收者名字
    msgRoot['Subject'] = 'Picture by the dormitory camera' + cur_tiem

    msgText = MIMEText('<b> Images taken with <i>dormitory camera</i> </b>. and this is the image.<br><img src="cid:image1"><br>ok!', 'html', 'utf-8')
    msgRoot.attach(msgText)

    filename = './pic/' + cur_tiem + '.jpg'
    fp = open(filename, 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()

    msgImage.add_header('Content-ID', '<image1>')
    msgRoot.attach(msgImage)

    smtp = smtplib.SMTP()
    smtp.connect('smtp.qq.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()


if __name__ == '__main__':

    # get_picture()
    # send_mail()
    import datetime
    import time as tm 
    print("======开始程序======")
    while True:
        cur_tiem = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        time = cur_tiem.split()
        date_hms = time[1].split(":")
        hour = date_hms[0]
        mintue = date_hms[1]
        second = date_hms[2]
        if second == '00' and int(mintue) % 10 == 0:
            try:
                print("Time is" + str(time[1]) + 'try to send email')
                get_picture(cur_tiem)
                send_mail(cur_tiem)
            except:
                break
        else:
            tm.sleep(1)

代码说明

  • 设定每隔10分钟拍摄照片
  • 照片保存至./pic/文件夹下,文件名为拍摄时间,例如2021-05-15 11:40:00.jpg

扩展

  • 使用nohup命令挂后台,具体操作请自行百度,或参考我的另一篇文章Linux之 nohup命令
  • 文件结构如下:在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值