【数据传递】通过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 天前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
用户8356290780511 天前
使用 Python 操作 Word 内容控件
后端·python
码云骑士1 天前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
闵孚龙1 天前
《PyTorch 深度修炼》Dataset 和 DataLoader:数据如何喂给模型
人工智能·pytorch·python
goldenrolan1 天前
A公司物料替代测试系统 v1.7:从需求到 exe/apk 的 AI 辅助全链路实践
android·自动化测试·软件测试·python·ai
菜板春1 天前
jupyter入门-手册-特征探索
python·jupyter
Metaphor6921 天前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
极光代码工作室1 天前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化
开发小能手-roy1 天前
StringBuilder vs StringBuffer:2024年还需要线程安全字符串吗?
开发语言·python·安全