python选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱(通过163邮箱)

2023-10-26

工作中需要将自动生成的表格发送给办公邮箱继续处理,结合遍历文件夹和自动发邮件,做出了可以选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
import tkinter as tk
from tkinter import filedialog

#选择文件夹
# 实例化
root = tk.Tk()
root.withdraw()

def file_ext(filename, level=1):
    return filename.split('.')[-level]

def _contain_file(path, extensions):
    assert os.path.exists(path), 'path must exist'
    assert os.path.isdir(path), 'path must be dir'

    if isinstance(extensions, str):
        extensions = [extensions]

    for file in os.listdir(path):
        if os.path.isfile(os.path.join(path, file)):
            if (extensions is None) or (file_ext(file) in extensions):
                return True
    return False

def _process_extensions(extensions=None):
    if extensions is not None:
        if isinstance(extensions, str):
            extensions = [extensions]
        assert isinstance(extensions, (list, tuple)), \
            'extensions must be str or list/tuple of str'
        for ext in extensions:
            assert isinstance(ext, str), 'extension must be str'
    return extensions

def get_files(path, extensions=None, is_recursive=True):
    extensions = _process_extensions(extensions)
    files = []
    # get files in current path
    if not is_recursive:
        for name in os.listdir(path):
            fullname = os.path.join(path, name)
            if os.path.isfile(fullname):
                if (extensions is None) or (file_ext(fullname) in extensions):
                    files.append(fullname)
        return files
    # get files recursively
    for main_dir, _, sub_file_list in os.walk(path):
        for filename in sub_file_list:
            fullname = os.path.join(main_dir, filename)
            if (extensions is None) or (file_ext(fullname) in extensions):
                files.append(fullname)
    return files

if __name__ == '__main__':
    path = filedialog.askdirectory()

    files = get_files(path)
    print(files)

mail_host ='smtp.163.com' #mail_host = 'smtp.qq.com'
port=25 #QQ邮箱是465
send_by = 'ahyy@163.com'
password = 'WMTXNTL'
username_recv = ['39840@qq.com']# 收件人,多个收件人用逗号隔开

msg = MIMEMultipart() # 创建一个带附件的实例
msg["Subject"] = files[0].split('\\')[-1].split('.')[-2]+"自动发送"#修改邮件标题,自动取一个附件名称
msg["From"] = send_by
print(msg["Subject"] )
# ---文字部分---
part = MIMEText("这是自动发送的净值,请查收,谢谢!")
msg.attach(part)

# ---附件部分---
for each in files:
    part = MIMEApplication(open(each, 'rb').read())
    part.add_header('Content-Disposition', 'attachment', filename=each.split('\\')[-1])
    msg.attach(part)

# 要注意位置参数和关键字参数啊啊
smtp = smtplib.SMTP(mail_host, port, 'utf-8')#原博主使用的是smpt = smtplib.SMTP_SSL(mail_host, port, 'utf-8'),163邮箱会报错
smtp.login(send_by, password)
smtp.sendmail(send_by, username_recv, msg.as_string())
smtp.quit()
print("发送成功")

效果如图
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱(通过163邮箱) 的相关文章

随机推荐

  • Intrinsics头文件与SIMD指令集、Visual Studio版本对应表

    Intrinsics头文件与SIMD指令集 Visual Studio版本对应表 File Intrinsics头文件 描述 指令集描述 VS Visual Studio版本号 VisualStudio Visual Studio版本名 F
  • 微信小程序上传图片到阿里云OSS,读取上传后oss后的图片

    一 config js var fileHost xxxx aliyuncs com 你的阿里云oss地址 var config aliyun OSS config uploadImageUrl fileHost 默认存在根目录 可根据需求
  • Static Timing Analysis for Nanometer Designs A Practical Approach

    分享电子书籍 静态时序分析圣经 Static Timing Analysis for Nanometer Designs A Practical Approach 1 setup time Setup time 建立时间 是数据信号 D 在
  • 小程序 - 日期选择器

    效果图 实现步骤 1 创建组件 wxml
  • Unity3D控制Animator播放

    有一个需求 要求第一次打开一个界面触发一个动画播放 关闭界面动画播放关闭 再次打开界面继续上次到播放而不是重新开始播放 如果动画播放结束关闭打开界面入口 即无法在此进入该界面 有两种实现方法 方法1 第一次打开界面开始播放特效动画 调用an
  • AI—漂亮的花简单制作(含详细教程)

    暑假在家刷短视频 不 不 不 球球 别别别 平面制作搞起来 跟数媒小可爱学炒鸡有意思的AI吧 今天带来的是一朵漂亮的花 gt 效果图入下 步骤一 用 星形 工具 gt 角点数 为25 如图 gt 确定 步骤二 按住ALT键 复制一个星形 缩
  • 再也不用担心网吧开黑队友听不清了!降噪解决方案了解一下?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯游戏云发表于云 社区专栏 经常逛游戏论坛的朋友会深有感触 很多玩家经常会在论坛里吐槽在网吧开黑的体验很差 噪音太多 在游戏语音开黑的过程中 如果其中一个队友身处网吧 则其他
  • chronyc sources -V

    Chrony 是一个时钟同步工具 而 chronyc sources V 是它的命令行参数 用于显示当前时钟源的详细信息 使用这个参数后 会输出当前时钟源的信息 包括 源类型 IP 地址 可用性 偏差和误差等 通过这些信息 可以了解时钟源的
  • Linux 编译运行查找头文件和库的顺序

    linux中在使用gcc进行编译时 可能会出现找不到相应库或头文件的情况 往往让人十分头疼 因此 此文描述了库和头文件的查找顺序和一些注意事项 希望能帮助大家在出错时能够快速定位和解决 头文件 gcc在编译时按照如下顺序寻找所需要的头文件
  • set,env和export的区别

    http blog csdn net longxibendi article details 6125075 http blog chinaunix net uid 128922 id 289956 html set 显示 设置 shell
  • JSP编程手记------jsp页url中传中文参数乱码问题续

    一个偶然的机会 发现了一个解决jsp页url中传中文参数乱码的方法 比我前面说的用隐形的form表单来的更加漂亮和容易 具体方法如下 程序清单 response sendRedirect gh 0001 xm java net URLEnc
  • Qt手动设置Kits套件

    Qt编译器版本手动设置方式 文章目录 Qt编译器版本手动设置方式 前言 一 安装MSVC2019 32bit 二 手动设置kits套件 总结 前言 在给Qt Creator添加自定义控件时 遇到的版本问题让人头疼 我用的Qt5 12 10
  • 那一年读过的技术经典书

    转载请注明 http blog csdn net xinzhangyanxiang article details 10199757 大学刚毕业 总结起来读过的书并不算多 而且主要集中在大四的时期读的 在此把经典统一总结一遍 先总结机器学习
  • Qt信号和信号槽(二)

    目录 信号槽使用拓展 示例1 一个信号可以对应多个槽函数 在上篇文章的代码中进行修改 示例2 用信号连接信号 信号槽的连接方式 示例 Lambda表达式 语法格式 定义和调用 信号槽使用拓展 一个信号可以连接多个槽函数 发送一个信号有多个处
  • SpringBoot使用quartz, 注入feignClient, client为null

    使用 autowired 活着构造方法注入 打断点查看注入的feigncliet为null 搜索网上的一些博客 大致原因是因为quartz启动是通过反射将一些类注入进来 启动的时候引用这个类还没初始化好 下面是解决方案 使用spring 提
  • OpenRestry-demo

    openRestry 基于Nginx和lua的高性能web平台内置了大量lua库和第三方的模块 为了使用lua开发一些定制功能 安装环境 安装环境 yum y install pcre devel openssl devel gcc cur
  • 基本的传染病模型:SI、SIS、SIR及其Python代码实现

    本文主要参考博客 http chengjunwang com en 2013 08 learn basic epidemic models with python 该博客有一些笔误 并且有些地方表述不准确 推荐大家阅读Albert Lasz
  • 【腾讯云 Cloud Studio 实战训练营】通过云IDE构建Web3项目

    iOS开发上架主页 在强者的眼中 没有最好 只有更好 移动开发领域优质创作者 阿里云专家博主 文章目录 背景 一 前言 二 Cloud Studio 主要功能和应用场景 三 Cloud Studio 实验前期准备 3 1 打开官网 3 2
  • 在MATLAB中,用Simulink搭建一个二阶传递函数模型

    文章目录 1 模型准备 二阶传递函数模型 1 1 二阶传递函数模型 1 1 1 时域模型 1 1 2 频域模型 1 2 二阶传递函数公式和参数 2 开始建模 在simulink中搭建二阶传递函数模型 2 1 从simulink库中添加传递函
  • python选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱(通过163邮箱)

    工作中需要将自动生成的表格发送给办公邮箱继续处理 结合遍历文件夹和自动发邮件 做出了可以选择文件夹 并自动发送这个文件夹下的所有文件 以附件的形式 至指定邮箱 import smtplib from email mime multipart