【数据传递】通过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将指定文件夹下的图像数据以附件形式发送给自己。通过此项目,用户可以轻松地设置指定文件夹,并自动定期扫描该文件夹下的新增图像数据。从而大大简化了数据分享的流程,提高了工作效率。不过大家一定要在甲方授权下进行采集

此博客仅作技术交流使用

相关推荐
费弗里1 小时前
Python全栈应用开发利器Dash 3.x新版本介绍(1)
python·dash
李少兄9 天前
解决OSS存储桶未创建导致的XML错误
xml·开发语言·python
就叫飞六吧9 天前
基于keepalived、vip实现高可用nginx (centos)
python·nginx·centos
Vertira9 天前
PyTorch中的permute, transpose, view, reshape和flatten函数详解(已解决)
人工智能·pytorch·python
学Linux的语莫9 天前
python基础语法
开发语言·python
匿名的魔术师9 天前
实验问题记录:PyTorch Tensor 也会出现 a = b 赋值后,修改 a 会影响 b 的情况
人工智能·pytorch·python
Ven%9 天前
PyTorch 张量(Tensors)全面指南:从基础到实战
人工智能·pytorch·python
mahuifa9 天前
PySide环境配置及工具使用
python·qt·环境配置·开发经验·pyside
大熊猫侯佩9 天前
ruby、Python 以及 Swift 语言关于 “Finally” 实现的趣谈
python·ruby·swift
19899 天前
【Dify精讲】第19章:开源贡献指南
运维·人工智能·python·架构·flask·开源·devops