背景

由于同学每周要通过邮箱收数学建模作业,100多人给她发附件,她要一个个地点着下载。

太麻烦了,所以想用程序实现下载附件的功能。

在网上查资料后,最终实现了稍为简单的下载附件功能,代码有些细节还不是很了解。

2019.4.16更新

过几天我也要用邮箱收文件,有了这份代码刚好能用!这再次印证知识不会没用处的,不学才会觉得知识没用呢。

代码

import poplib
import email
import time
from email.parser import Parser
from email.header import decode_header def decode_str(s):#字符编码转换
value, charset = decode_header(s)[0]
if charset:
value = value.decode(charset)
return value def get_att(msg):
attachment_files = [] for part in msg.walk():
file_name = part.get_filename() # 获取附件名称类型
contType = part.get_content_type() if file_name:
h = email.header.Header(file_name)
dh = email.header.decode_header(h) # 对附件名称进行解码
filename = dh[0][0]
if dh[0][1]:
filename = decode_str(str(filename, dh[0][1])) # 将附件名称可读化
print(filename)
# filename = filename.encode("utf-8")
data = part.get_payload(decode=True) # 下载附件
att_file = open('D:\\数模作业\\' + filename, 'wb') # 在指定目录下创建文件,注意二进制文件需要用wb模式打开
attachment_files.append(filename)
att_file.write(data) # 保存附件
att_file.close()
return attachment_files with open('D:\\config.txt', 'r') as f1:
config = f1.readlines()
for i in range(0, len(config)):
config[i] = config[i].rstrip('\n') # print(config) # POP3服务器、用户名、密码
host = config[0] # pop.163.com
username = config[1] # 用户名
password = config[2] # 密码 # 连接到POP3服务器
server = poplib.POP3(host) # 身份验证
server.user(username)
server.pass_(password) # stat()返回邮件数量和占用空间:
# print('Messages: %s. Size: %s' % server.stat()) # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
resp, mails, octets = server.list()
# print(mails) # 倒序遍历邮件
index = len(mails)
for i in range(index, 0, -1):
# lines存储了邮件的原始文本的每一行
resp, lines, octets = server.retr(i) # 邮件的原始文本:
msg_content = b'\r\n'.join(lines).decode('utf-8') # 解析邮件:
msg = Parser().parsestr(msg_content) # 获取附件
f_list = get_att(msg) print("文件已下载完成,10秒后关闭程序!")
time.sleep(10)

打包

使用pyinstaller,将该.py文件打包成.exe文件。

pyinstaller -F xuer.py

这样她就不需要安装python,方便她使用。

为了保护她的密码隐私,程序通过她自己的文件获得她的用户名和密码,之后文件会自动下载到D盘中数学建模文件夹下。

作者:@臭咸鱼

本文为作者原创,转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!

python批量下载邮件附件的更多相关文章

  1. 用Python批量下载DACC的MODIS数据

    本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...

  2. .NET接收邮件下载邮件附件——openpop.net

    使用OpenPop.Net接收邮件很方便,下面是接收下载邮件附件的代码 OpenPop.Net下载地址 https://sourceforge.net/projects/hpop/ public cl ...

  3. python批量下载微信好友头像,微信头像批量下载

    #!/usr/bin/python #coding=utf8 # 自行下载微信模块 itchat 小和QQ496631085 import itchat,os itchat.auto_login() ...

  4. 用python批量下载贴吧图片 附源代码

    环境:windows 7 64位:python2.7:IDE pycharm2016.1 功能: 批量下载百度贴吧某吧某页的所有帖子中的所有图片 使用方法: 1.安装python2.7,安装re模块, ...

  5. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  6. Python 批量下载BiliBili视频 打包成软件

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  7. python——批量下载图片

    前言 批量下载网页上的图片需要三个步骤: 获取网页的URL 获取网页上图片的URL 下载图片 例子 from html.parser import HTMLParser import urllib.r ...

  8. Python - 批量下载 IIS 共享的文件

    1.说明 用 IIS 以WEB形式发布了本地文件夹,提供文件下载,并设置了访问权限:默认下载需要点击一个一个的下载,web界面如下: 3.脚本 执行脚本批量下载文件,会在当前目录创建文件夹,并压缩该文 ...

  9. python批量下载图片的三种方法

    一是用微软提供的扩展库win32com来操作IE: win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到). 二是用selenium的webdriver: sele ...

随机推荐

  1. 和HTTP相关的web服务器内容

    一台web服务器可以搭建多个独立域名的网站,也可以作为通信路径上的中转服务器提升传输效率. 1. 用单台虚拟主机实现多个域名 多个域名解析后对应的ip地址相同,需要在Host首部中包含完整的主机名或者 ...

  2. LeetCode. 计数质数

    题目要求: 统计所有小于非负整数 n 的质数的数量. 示例i: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 代码: class Soluti ...

  3. nginx浏览器开启密码验证

    如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证.只有让用户输入正确的用户名和密码才能正常访问.效果如下: 在 ngi ...

  4. VS2013 + Nunit 安装搭建

    Nunit 官方给我提供了Nunit 3的四种安装方式 第一种 通过NuGet进行Full Nunit安装 第二种 通过NuGet进行轻量级 NunitLite 安装 第三种 通过Zip 压缩包下载安 ...

  5. 在Linux上安装和配置CSF(配置服务器安全和防火墙)

    CSF是国外一家小公司开发的linux系统免费防火墙,它基于iptables工作,能有效缓解服务器压力,具有自动屏蔽暴力破解密码IP.管理开放端口.免疫轻量DDos和CC等等功能,同时,安装和使用也极 ...

  6. Java语言中:float、double数据类型在内存中是如何存储的

    引用参考 https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528 https://blog.csdn.net/yansmile1/arti ...

  7. .Net下二进制形式的文件存储与读取

    .Net下图片的常见存储与读取凡是有以下几种:存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].1.参数是图片路径:返回 ...

  8. javascript数字格式化通用类——accounting.js使用

    简介 accounting.js 是一个非常小的JavaScript方法库用于对数字,金额和货币进行格式化.并提供可选的Excel风格列渲染.它没有依赖任何JS框架.货币符号等可以按需求进行定制. 代 ...

  9. JS中逗号运算符的用法

    逗号运算符,它将先计算左边的参数,再计算右边的参数值.然后返回最右边参数的值. 原书举的例子不太好,无法解释上面那句话,这里另外提供一个: var a = 10, b = 20; function C ...

  10. springsecurity学习

    首先讲一下,没有用到数据库,然后觉得重要的就是security的配置securityConfig.class,不太会说(好像也不太会用),上图吧,也是学习狂神过来的 项目结构 大致效果 pom.xml ...