透过Python 将接收邮件邮件进行分类统计
工作的需要自行学习了Python的一些功能,将所学的经验在这里分享给大家
文章目录
目录
文章目录
前言
一、环境准备
二、使用步骤
1.引入库
2.读入数据
总结
前言
工作中我们可能会透过邮件,让其他公司收集资料,在学会Python之前,我们需要用人工将邮件一个一个的下载下来,并且统计有哪一家公司发送了资料,哪一家公司还没有发送,统计也是相当麻烦的事情,
因此我用Python写了一个工具,能够自动的接收邮件并且储存起来,相关的发送人员什么时候发送?并进行跟踪
公司的邮件是用exchange的形式
一、环境准备
我想将收起来的邮件统一放在一个固定的路径中,收件人的一些信息我要独立放在一个Excel里面去记录,处理好的准备要发送的邮件,我另外放在一个地方
二、使用步骤
1.引入库
代码如下(示例):
import os
import urllib3
from datetime import timedelta,datetime
import pandas as pd
import numpy as np
from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter
from exchangelib import DELEGATE, Account, Credentials, Message, Mailbox, HTMLBody,Configuration,NTLM,FileAttachment,EWSTimeZone#此句用来消除ssl证书错误,exchange使用自签证书需加上
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapterurllib3.disable_warnings() # 取消SSL安全连接警告
# Tell exchangelib to use this adapter class instead of the default
# exchangelib provides a sample adapter which ignores TLS validation errors.
# Use at own risk. NTML is NT LAN Manager.# 设置邮箱账号 输入你的域账号如
creds = Credentials(username='xxxxxxxxx@domain.com', # 修改为 公邮的 user <<<<<<<<<<<<<<<<<<<<修改连接自己的邮箱password='xxxxxxxxxxxxx' #修改为自己的密码
)
config = Configuration(server='xxxxx.com', credentials=creds, auth_type=NTLM)
account = Account(primary_smtp_address='username@domain.com',credentials=creds,autodiscover=True,config=config,access_type=DELEGATE)
2.读入数据
代码如下(示例):
# 此处为文件路径
path_inbox = r"D:\Doc\Python\inbox\\" #记录inbox 附件
path_outbox = r"D:\Doc\Python\outbox\\" #outbox 附件
path_data = r"D:\Doc\Python\data\\" #data管理# 自定义函数:保存所有邮件附件到本地制定地址
from exchangelib import UTC
def saveAttachments(attachments):for attachment in attachments:if 'xls' in attachment.name or 'XLS' in attachment.name: #过滤要有‘xls' 在附件名中才存档save_file_name = os.path.join(path_inbox,attachment.name)with open(save_file_name, 'wb') as f: #wb:以二进制写模式打开f.write(attachment.content)inbox = account.inbox # 获取用户账户的收件箱
unread_email_list = inbox.filter(is_read=False) # 获取收件箱未读邮件列表
print(unread_email_list)
mail_file = os.path.join(path_data,"mail_log.xlsx")
mail_file_df = pd.read_excel(mail_file) # 记录mail 的excel
row = len(mail_file_df) # 读出 excel 的 行数
print(mail_file_df)
# 逆序排列未读邮件列表
mail_log.xlsx 是我要作为邮件记录的一个Excel格式内容如下:
里面包含了主题发件人发件人的邮箱, 与邮件的接收时间
我们来看一下怎么把这些资料从Email里面读出来
代码如下(示例):
我在处理接收时间的时候遇到这样子的报错 Excel does not support datetimes with timezones
因为在 exchange上面是用time zone的方式记录时间,Excel不接受这样子的时间方式,所以我先将参数直接转换成为文字格式,但是文字格式的日期与我们相差了8个小时,
我们怎么把这8个小时再追加回去呢?这时候就需要你用到strptime的函数来进行加工,加工后的日期才是真正的收件日期
因为同一个邮箱我们可能要做不同的事情,所以我们可以利用邮件标题中的特殊属性来进行邮件的过滤,这样python只会捞取要处理的邮件进行处理
for email in unread_email_list: #.order_by('-datetime_received'):# 转换 timezone# 如不转换 存入excel会报错 ”Excel does not support datetimes with timezones“dt = str(email.datetime_received) #转换文字dt = dt[:19] #取前19码 yyyy-mm-dd hh:mm:ssreceived_time = datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")+ timedelta(hours=8) # + 8hrprint(received_time)# 如果邮件标题中包含‘【xxx数据处理xxx】’ 邮件过滤if '【xxx数据处理】' in email.subject: #'QiQi' in email.sender.name 可以过滤 senderprint(" --------------- prepare date start here ----------------")pd1 = [email.subject, email.sender.name, email.sender.email_address, received_time]row = row + 1mail_file_df.loc[row] = pd1email.is_read = True # 将邮件设置为已读email.save(update_fields=['is_read']) # 保存邮件的已读属性# 调用自定义函数:保存邮件附件到本地saveAttachments(email.attachments)
mail_file_df.to_excel(mail_file,na_rep=11,index=False)
总结
以上就是今天想给大家的内容,非常的简短,就能够处理邮件下载分类统计的功能,完整的代码如下:
# coding=utf-8
#
import os
import urllib3
from datetime import timedelta,datetime
import pandas as pd
from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter
from exchangelib import DELEGATE, Account, Credentials, Message, Mailbox, HTMLBody,Configuration,NTLM,FileAttachment,EWSTimeZone
#此句用来消除ssl证书错误,exchange使用自签证书需加上
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapterurllib3.disable_warnings() # 取消SSL安全连接警告
# Tell exchangelib to use this adapter class instead of the default
# exchangelib provides a sample adapter which ignores TLS validation errors.
# Use at own risk. NTML is NT LAN Manager.# 设置邮箱账号 输入你的域账号如
creds = Credentials(username='username@domain.com', # 修改为 公邮的 userpassword='xxxxxx'
)
config = Configuration(server='xxxx.com', credentials=creds, auth_type=NTLM)
account = Account(primary_smtp_address='username@domain.com',credentials=creds,autodiscover=True,config=config,access_type=DELEGATE)
# 此处为文件路径
path_inbox = r"D:\Doc\Python\inbox\\" #记录inbox 附件
path_outbox = r"D:\Doc\Python\outbox\\" #outbox 附件
path_data = r"D:\Doc\Python\data\\" #data管理# 自定义函数:保存所有邮件附件到本地制定地址
from exchangelib import UTC
def saveAttachments(attachments):for attachment in attachments:if 'xls' in attachment.name: #过滤要有‘xls' 在附件名中才存档save_file_name = os.path.join(path_outbox,attachment.name)with open(save_file_name, 'wb') as f:f.write(attachment.content)inbox = account.inbox # 获取用户账户的收件箱
unread_email_list = inbox.filter(is_read=False) # 获取收件箱未读邮件列表
mail_file = os.path.join(path_data,"mail_log.xlsx")
mail_file_df = pd.read_excel(mail_file) # 记录mail 的excel
row = len(mail_file_df) # 读出 excel 的 行数
# 逆序排列未读邮件列表
for email in unread_email_list: #.order_by('-datetime_received'):
# print(email.subject) # 打印邮件标题
# print(email.text_body) # 打印邮件是否已读
# print(email.sender.name) # 打印邮件发件人
# print(email.sender.email_address)
# print(email.datetime_received) # 打印邮件接收时间# 转换 timezone# 如不转换 存入excel会报错 ”Excel does not support datetimes with timezones“dt = str(email.datetime_received) #转换文字dt = dt[:19] #取前19码 yyyy-mm-dd hh:mm:ssreceived_time = datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")+ timedelta(hours=8) # + 8hr
# print(received_time)# 如果邮件标题中包含‘【abc数据处理】’ 邮件过滤if '【abc数据处理】' in email.subject: #'QiQi' in email.sender.name 可以过滤 senderprint(" --------------- prepare date start here ----------------")pd1 = [email.subject, email.sender.name, email.sender.email_address, received_time]row = row + 1mail_file_df.loc[row] = pd1
# email.is_read = True # 将邮件设置为已读
# email.save(update_fields=['is_read']) # 保存邮件的已读属性# 调用自定义函数:保存邮件附件到本地saveAttachments(email.attachments)
mail_file_df.to_excel(mail_file,na_rep=11,index=False)print("--------done---------")
'''
if __name__ == "__main__":# 连接邮箱服务器account = connectServer()while True:# 获取未读邮件列表unhandleMails = getUnreadMail(account)# 处理邮件handleMail(unhandleMails, account)time.sleep(30) # 休眠30秒
'''
要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
透过Python 将接收邮件邮件进行分类统计相关推荐
- python怎么接收邮件
要在 Python 中接收邮件,需要使用电子邮件协议(如 IMAP 或 POP3)与邮件服务器进行通信.推荐使用 Python 的第三方库 "imaplib" 或 "po ...
- python自动接收邮件_Python自动发送和收取邮件的方法
作为课代表,经常要做的两件事是:帮忙发作业和帮忙收作业,而且很多时候是通过邮件来完成的,如果手动一封一封的收取和发送就很浪费时间--人生苦短,我用Python. 直接上代码,不想了解细节原理直接拉到最 ...
- python自动化办公:邮件篇 (定时邮件问候女票so easy)
前言和准备工作 如果你能找到一个要看邮件的女票哈,本文能帮你用程序实现在每天不同时间段给女友定时给女友发消息,不错过早上,中午.晚安! 而你自己却可以玩游戏,不管这回事. 你告诉我看邮件的女生少,别着 ...
- Python发送多附件邮件的方法
Python发送多附件邮件的基本思路,首先就是用MIMEMultipart()方法来表示这个邮件由多个部分组成.然后再通过attach()方法将各部分内容分别加入到MIMEMultipart容器中.M ...
- Python办公自动化之收发邮件--163和qq邮箱
利用Python发送接收邮件 1.邮件相关概念 POP3:Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子 ...
- 转:python模块学习 ---- smtplib 邮件发送
2019独角兽企业重金招聘Python工程师标准>>> 在基于互联网的应用中,程序经常需要自动地发送电子邮件.如:一个网站的注册系统会在用户注册时发送一封邮件来确认注册:当用户忘记登 ...
- 利用python发送邮件_利用python实现简单的邮件发送客户端示例
脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...
- python发邮件11002_【python发送zabbix报警邮件,SSL版本】mailman.py
[python发送zabbix报警邮件,SSL版本]mailman.py#!/usr/local/bin/python3 # # via @ 20150210 # SSL only ''' 用法: ...
- python实现邮件客户端_利用python实现简单的邮件发送客户端示例
脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...
最新文章
- 1291 火车线路(区间修改,区间最值)
- Linux~上部署.net MVC出现的问题与解决
- 苹果手机各种型号图片_洪湖苹果X尾插华强北档口诚信收购
- 裁员屠刀下一个目标会是谁?
- css实现垂直居中定位
- python数学建模可视化_数学建模之流程图和数据可视化
- Python---HTML表单
- [文摘20070816]家(周国平)
- Atitit 项目的主体设计与结构文档 v3
- u盘启动linux hp服务器,分享下用U盘启动给服务器【HP DL165 G7】安装原版2003系统的经验...
- Hive(二):with as用法
- 初级X编程(非常好的入门学习资料)
- XP硬盘读写速度很慢的解决方法
- 《GEB-EGB》-人工智能
- 软件开发流程与初始软件测试
- 虎牙在全球 DNS 秒级生效上的实践
- Ext GridPanel多选问题
- Centos7 安装DB2
- netstat查看CLOSE_WAIT过多
- 【无标题】求一个同款圣诞树视频,女朋友想要,价钱随便开。