作者介绍:目前就职于电商数据分析师,日常工作以爬虫和DBA数据库管理为主,业务场景模型搭建为辅!自16年至今一直从事数据相关工作,从最初的表哥到现在的大数据、数据挖掘、机器学习,一直不断成长!日常活跃于CSDN

Slogan: 科技成就商业未来,数据看透问题本质
CSDN:https://blog.csdn.net/qq_35866846
微信公众号:诡途

一、项目背景

继上一次的 群聊机器人开发 之后的工作流程再优化,上次研究完群聊机器人之后,开发了三个机器人替我处理表格并自动发出去。其中有一项工作的数据源来源于邮件,还需要我自己手动下载,放入指定位置才可以处理!虽然比之前方便了很多,但是还是想更方便些。(自己淘汰自己的路上越走越远o(╥﹏╥)o),于是想着能不能用代码下载,研究了半天还终于整出来了,而且还是两种方法!

二、有授权码的场景

准备工作,QQ邮箱开通授权码流程

# 导入库——qq邮箱测试,其他邮箱略有差异
import poplib,email,datetime,time,traceback,sys,telnetlib,zipfile,os,shutil
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
​
# 输入邮件地址, 口令和POP3服务器地址:
email_user='xxxxxx@qq.com'
# 此处密码是授权码,用于登录第三方邮件客户端
password='你自己的授权码'
pop3_server='pop.qq.com'
​
# 授权码登录邮箱
def email_login(email_user,password,pop3_server):# 连接到POP3服务器,有些邮箱服务器需要ssl加密,可以使用poplib.POP3_SSLtelnetlib.Telnet('pop.qq.com',995)server=poplib.POP3_SSL(pop3_server,995,timeout=10)
#     server=poplib.POP3(pop3_server,110,timeout=10)# 可以打开或关闭调试信息
#     server.set_debuglevel(1)
​# 身份认证:server.user(email_user)server.pass_(password)# 返回邮件数量和占用空间:print('Messages: %s. Size: %s'%server.stat())# list()返回所有邮件的编号:resp,mails,octets = server.list()return mails,serverdef decode_str(str_in):"""字符编码转换"""value, charset = decode_header(str_in)[0]if charset:value = value.decode(charset)return valuedef save_att_file(save_path):"""附件下载函数"""for part in msg.walk():file_name = part.get_filename()#     contentType = part.get_content_type()attachment_files =[]if file_name:file_name = decode_str(file_name)data =  part.get_payload(decode=True)att_file = open(os.path.join(save_path,file_name), 'wb')attachment_files.append(file_name)att_file.write(data)att_file.close()print(f"附件 {file_name} 下载完成")
​
def main(yesterday):# 遍历所有邮件for i in range(1,len(mails)+1):resp,lines,octets = server.retr(i)msg_content=b'\r\n'.join(lines).decode()
​# 解析邮件:msg = Parser().parsestr(msg_content)From = parseaddr(msg.get('from'))[1]#发件人To = parseaddr(msg.get('To'))[1]#收件人Cc = parseaddr(msg.get_all('Cc'))[1]#抄送人Subject = decode_str(parseaddr(msg.get('Subject'))[1])#主题
​# 获取邮件时间,格式化收件时间date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S')# 邮件时间格式转换date2 = time.strftime("%Y-%m-%d",date1)
​print(f'发件人:{From};收件人:{To};抄送人:{Cc};主题:{Subject};收件日期:{date2}')
​# 主题和日期验证所需邮件if ("TM在售" in Subject)&(date2 == yesterday):save_att_file(save_path)# 今天日期
today = datetime.date.today()
# 昨天日期
yesterday = (today - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
save_path = os.getcwd()
​
# 登录获取邮件列表
mails,server = email_login(email_user,password,pop3_server)# 下载主程序
main(yesterday)

三、无授权码的场景

鉴于企业邮箱没有给开授权码权限,以及业务流程限制不允许使用私人邮箱,又研究了下直接使用win32com直接驱动outlook客户端

注:使用前提,本机配置好了outlook,即至少登录过一次,因为我只配置了一个邮箱账户,没有测试多账户情况

# 导入库
import win32com.client
import os
​
def download_email_att(yesterday):# 创建outlook客户端链接outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
​# "6" 是指文件夹的索引,在本例中,表示收件箱。可以把那个号码改成参考号inbox = outlook.GetDefaultFolder(6)
​# 获取收件箱列表messages = inbox.Items# # 获取当前最新邮件# message = messages.GetFirst()# # 获取邮件主题# subject = message.Subject# # 获取邮件正文# body = message.Body
​# 倒序读取最新30封邮件 ——因为邮件过多,完全遍历耗时过久for i in range(len(messages),len(messages)-30,-1):message = messages(i)subject = message.Subjectdate = message.senton.date()#     print(subject,date)if ("TM在售" in subject)&(str(date) == yesterday):#         print(subject,date)# 获取附件信息attachments = message.Attachmentsnum_attach = len([x for x in attachments])for x in range(1, num_attach + 1):attachment = attachments.Item(x)# 保存附件到save_path下attachment.SaveASFile(os.path.join(save_path, attachment.FileName))print(f"附件 {attachment}下载完成")break  # 找到指定邮件打断循环
​
# 今天日期
today = datetime.date.today()
# 昨天日期
yesterday = (today - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
# 附件保存路径
save_path = os.getcwd()
download_email_att(yesterday)

科技成就商业未来,数据看透问题本质!
我是诡途,感谢阅读,欢迎转发分享点赞!
文章仅供学习交流,转载请注明来源!

python自动下载邮件附件相关推荐

  1. python自动下载邮件附件_Python邮件处理(收取、解码及附件下载)

    之前在工作中需要用到自动查收邮件和下载附件,于是用python做了一些自动化的尝试.以下代码主要实现了两个功能,一个是下载并解码邮件正文(print_info函数),另一个是下载邮件附件(get_at ...

  2. python自动下载邮件附件_Python 批量导出邮件附件 | 互联网笔记

    采用python 3 windows 环境可Anaconda进行一键安装环境, 此脚本适用用于下列状况 报表每日自动发送至邮箱,多邮箱每天需要登陆或使用客户端下载邮件 收集的资料手动下载太麻烦. 可在 ...

  3. python自动下载邮件附件_Python批量下载电子邮件附件并汇总合并Excel文件

    原标题:Python批量下载电子邮件附件并汇总合并Excel文件 前几天在公众号搞了一波送书活动,详见福利:免费赠送240本Python教材,该文推送之后,立刻收到了大量的样书申请表,那么接下来的工作 ...

  4. python自动下载邮件_python实现邮件自动化

    1.自动接收邮件并且下载附件,使用pop3协议. # 接收邮件并下载邮件附件 import poplib import email import datetime import time from e ...

  5. python批量下载邮件附件

    背景 由于同学每周要通过邮箱收数学建模作业,100多人给她发附件,她要一个个地点着下载. 太麻烦了,所以想用程序实现下载附件的功能. 在网上查资料后,最终实现了稍为简单的下载附件功能,代码有些细节还不 ...

  6. python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)

    1.设置发送邮件邮箱的SMTP服务 https://www.360kuai.com/pc/927b9f8da3555bb70?cota=4&kuai_so=1&tj_url=xz&am ...

  7. python发送邮件 python发送qq,163,sohu, xinlang, 126等邮件 python自动发邮件总结及实例说明...

    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...

  8. python 自动下载文件_【Py大法系列--03】Python如何自动下载文件

    问题描述 Python自动下载文件,通用文件,包括但不限于压缩文件.图片等. 解决方法 一般情况下,Python下载文件的方式有以下几种: 利用urllib.urllib2,即Python爬虫用的最多 ...

  9. outlook搜索栏跑到上面去了_Outlook邮箱批量下载邮件附件+快速复制文件名

    今天的文章很简单,但很实用,可用于批量接收并下载别人发给你的邮件附件. 背景 作为老师,每年都会收到许多必须要通过附件接收的学生邮件,但学生多了.作业多了,老师下载学生附件的操作就变得极为枯燥和浪费时 ...

  10. 通过JavaMail下载邮件附件

    通过JavaMail下载邮件附件 需求 JavaMail 工具类 附件类 使用 遇到的一些意外 需求 因为某些特定的业务需要,要从邮件中获取附件.花了一些时间,最终业务需求实现了,但是也遇到一些坑,所 ...

最新文章

  1. java switch 表达式_尝鲜Java 12新特性:switch表达式
  2. 在linux系统中安装VSCode(Visual Studio Code)
  3. Microsoft Dynamics CRM 2011中,Lookup字段的赋值
  4. 从零入门 Serverless | 一文详解 Serverless 架构模式
  5. NGINX前端代理TOMCAT取真实客户端IP
  6. [asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗?
  7. 练习图200例图纸讲解_实物图+电气图纸讲解:教你学会看配电系统图,不收藏,可惜了...
  8. [iOS]通过xib定义Cell然后关联UICollectionView
  9. Q126:PBRT-V3,VolPathIntegrator(体渲染)流程概述
  10. oracle基于脚本的安装失败,脚本建库导致 Oracle 组件未安装故障案例
  11. 开源大数据周刊-第90期
  12. VC.【转】采用_beginthread/_beginthreadex函数创建多线程
  13. html当当网上书店,完整版:当当网上书店
  14. RT-Thread硬件测试(一)—— 485串口测试
  15. Windows2012 系统从MBR转GPT免重装的经验
  16. gloox1.0使用Emai格式的账号登录
  17. 没有人能随随便便成功,但没有必要活得像尘埃一样卑微
  18. 如何快速制作证件照并压缩到100K?
  19. 设想Apple的七大未来产品
  20. Sublime Text3插件安装(经典)

热门文章

  1. 涡CFTurbo 10.2.6 2017泵轮涡旋式机械设计
  2. MacOS Ventura 13.0 Beta8 (22A5352e) 带 OC 0.8.4 三分区原版黑苹果镜像
  3. Pandas高级教程之:Dataframe的合并
  4. python微信刷屏_用python玩转微信
  5. VS2010+QT5安装教程
  6. shell脚本学习指南——好书推荐
  7. 百度网盘搜索功能伪增强
  8. Python爬虫实战(二):爬取快代理构建代理IP池
  9. HTML网页设计制作大作业(div+css)~ 环境保护(5个页面)
  10. Android各控件Demo下载地址