【数据传递】通过Email对指定文件夹下的图像数据以附件形式发送给自己

关键词: python 、 数据传递 、 数据收集 、 邮件

背景

在制作图像数据集时我们往往是需要大量甲方现场数据,然而自己却常常因各类条件受限无法很好的获取现场数据。如:

  1. 甲方不会安装远程软件;
  2. 甲方网络不在公网上,无法把数据映射到公网上便于自己获取;
  3. 自己没有公网,无法与甲方进行连接;

对此我深感棘手,本着能白嫖原则绝对不多花一分钱,我想到了一种方式可以解决上述问题,那就是以邮件的形式获取现场数据,这样只需要甲方的PC端能够正常上网即可实现数据的传输。

前提

在《计网》中的邮件的网络协议主要包括SMTPPOP3IMAP。其中SMTP(简单邮件传输协议)是用于发送电子邮件的协议,它提供可靠且有效的电子邮件传输服务;POP3(邮局协议)是用于接收电子邮件的协议。它允许用户从邮件服务器上下载收到的邮件到本地计算机,同时删除保存在邮件服务器上的邮件;IMAP(Internet邮件访问协议)也是一种用于访问和管理电子邮件的协议。与POP3类似,但IMAP在邮件的管理和访问上更加灵活,提供了更多的功能和便利性,使用户可以更方便地管理邮件。

这里我们选择大家几乎都有的QQ邮箱作为载体(薅马x腾的羊毛),大家进入自己的QQ邮箱开启POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

这里我们会获取到一个授权码,请copy这个授权码后面代码中会使用到。

发邮件

在这里我也是改进了下网络上大佬们的代码,主要优化贡献如下:

  1. 新增读取ini文件配置,可以修改配置文件中文件夹的路径;
  2. 新增读取ini文件配置,设置一次发送图像的上限;
  3. 改单张图像为多张图像共同发送至自己的邮箱中;
shell 复制代码
import configparser
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

class emailsend:
    def __init__(self, account="你的邮箱地址", authorization="你的授权码"):
        self.sender = account
        self.receiver = [account]
        self.smtpserver = 'smtp.qq.com'
        self.username = account
        self.password = authorization
        self.mail_title = ' '

    def sendfile(self, path=None,T=100):  # 带附件的发送
        # 创建一个带附件的实例
        message = MIMEMultipart()
        message['From'] = "{}".format(self.sender)  # 发送者
        message['To'] = ",".join(self.receiver)  # 接收者
        message['Subject'] = Header(self.mail_title, 'utf-8')

        count = 0
        for filename in os.listdir(path):
            file_path = os.path.join(path, filename)
            # 构造附件2(附件为JPG格式的图片)
            att2 = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8')
            att2["Content-Type"] = 'application/octet-stream'
            att2["Content-Disposition"] = 'attachment; filename="%s"' % file_path
            message.attach(att2)
            os.remove(file_path)
            count += 1
            if count == T:
                break
        try:
            smtpObj = smtplib.SMTP_SSL(self.smtpserver, 465)
            smtpObj.login(self.username, self.password)
            smtpObj.sendmail(self.sender, self.receiver, message.as_string())
            print("mail has been send successfully")
            smtpObj.quit()
        except Exception as e:
            print('邮件发送失败   ' + str(e))
        return


if __name__ == '__main__':
    cfg = configparser.ConfigParser()  # 类实例化
    # 定义文件路径
    path = 'Config.ini'
    # 第一种读取ini文件方式,通过read方法
    cfg.read(path)
    dpath = cfg.get('email', 'DPath') # 待传输图像数据文件夹
    TCount = cfg.getint(cfg.get('email', 'TCount'))
    es = emailsend()
    es.sendfile(dpath,TCount)

总结

本项目的目标是开发一个自动化解决方案,通过Email将指定文件夹下的图像数据以附件形式发送给自己。通过此项目,用户可以轻松地设置指定文件夹,并自动定期扫描该文件夹下的新增图像数据。从而大大简化了数据分享的流程,提高了工作效率。不过大家一定要在甲方授权下进行采集

此博客仅作技术交流使用

相关推荐
海绵波波1078 分钟前
flask后端开发(9):ORM模型外键+迁移ORM模型
后端·python·flask
余生H12 分钟前
前端Python应用指南(二)深入Flask:理解Flask的应用结构与模块化设计
前端·后端·python·flask·全栈
CriticalThinking38 分钟前
Pycharm不正常识别包含中文路径的解释器
ide·python·pycharm
sin22011 小时前
springboot数据校验报错
spring boot·后端·python
eric-sjq1 小时前
基于xiaothink对Wanyv-50M模型进行c-eval评估
人工智能·python·语言模型·自然语言处理·github
是十一月末2 小时前
机器学习之KNN算法预测数据和数据可视化
人工智能·python·算法·机器学习·信息可视化
工业互联网专业2 小时前
基于OpenCV和Python的人脸识别系统_django
人工智能·python·opencv·django·毕业设计·源码·课程设计
杜小白也想的美2 小时前
FlaskAPI-初识
python·fastapi
一只搬砖的猹2 小时前
cJson系列——常用cJson库函数
linux·前端·javascript·python·物联网·mysql·json