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

此博客仅作技术交流使用

相关推荐
扫地的小何尚14 分钟前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
wanglei20070841 分钟前
生产者消费者
开发语言·python
清水白石0081 小时前
《从零到进阶:Pydantic v1 与 v2 的核心差异与零成本校验实现原理》
数据库·python
昵称已被吞噬~‘(*@﹏@*)’~1 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战
2501_941877981 小时前
从配置热更新到运行时自适应的互联网工程语法演进与多语言实践随笔分享
开发语言·前端·python
酩酊仙人1 小时前
fastmcp构建mcp server和client
python·ai·mcp
且去填词2 小时前
DeepSeek API 深度解析:从流式输出、Function Calling 到构建拥有“手脚”的 AI 应用
人工智能·python·语言模型·llm·agent·deepseek
rgeshfgreh3 小时前
Python条件与循环实战指南
python
rgeshfgreh3 小时前
通达信LC1文件结构解析指南
python
七夜zippoe3 小时前
事件驱动架构:构建高并发松耦合系统的Python实战
开发语言·python·架构·eda·事件驱动