工作的需要自行学习了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 将接收邮件邮件进行分类统计相关推荐

  1. python怎么接收邮件

    要在 Python 中接收邮件,需要使用电子邮件协议(如 IMAP 或 POP3)与邮件服务器进行通信.推荐使用 Python 的第三方库 "imaplib" 或 "po ...

  2. python自动接收邮件_Python自动发送和收取邮件的方法

    作为课代表,经常要做的两件事是:帮忙发作业和帮忙收作业,而且很多时候是通过邮件来完成的,如果手动一封一封的收取和发送就很浪费时间--人生苦短,我用Python. 直接上代码,不想了解细节原理直接拉到最 ...

  3. python自动化办公:邮件篇 (定时邮件问候女票so easy)

    前言和准备工作 如果你能找到一个要看邮件的女票哈,本文能帮你用程序实现在每天不同时间段给女友定时给女友发消息,不错过早上,中午.晚安! 而你自己却可以玩游戏,不管这回事. 你告诉我看邮件的女生少,别着 ...

  4. Python发送多附件邮件的方法

    Python发送多附件邮件的基本思路,首先就是用MIMEMultipart()方法来表示这个邮件由多个部分组成.然后再通过attach()方法将各部分内容分别加入到MIMEMultipart容器中.M ...

  5. Python办公自动化之收发邮件--163和qq邮箱

    利用Python发送接收邮件 1.邮件相关概念 POP3:Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子 ...

  6. 转:python模块学习 ---- smtplib 邮件发送

    2019独角兽企业重金招聘Python工程师标准>>> 在基于互联网的应用中,程序经常需要自动地发送电子邮件.如:一个网站的注册系统会在用户注册时发送一封邮件来确认注册:当用户忘记登 ...

  7. 利用python发送邮件_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  8. python发邮件11002_【python发送zabbix报警邮件,SSL版本】mailman.py

    [python发送zabbix报警邮件,SSL版本]mailman.py#!/usr/local/bin/python3 # # via  @ 20150210 # SSL only ''' 用法: ...

  9. python实现邮件客户端_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

最新文章

  1. 1291 火车线路(区间修改,区间最值)
  2. Linux~上部署.net MVC出现的问题与解决
  3. 苹果手机各种型号图片_洪湖苹果X尾插华强北档口诚信收购
  4. 裁员屠刀下一个目标会是谁?
  5. css实现垂直居中定位
  6. python数学建模可视化_数学建模之流程图和数据可视化
  7. Python---HTML表单
  8. [文摘20070816]家(周国平)
  9. Atitit 项目的主体设计与结构文档 v3
  10. u盘启动linux hp服务器,分享下用U盘启动给服务器【HP DL165 G7】安装原版2003系统的经验...
  11. Hive(二):with as用法
  12. 初级X编程(非常好的入门学习资料)
  13. XP硬盘读写速度很慢的解决方法
  14. 《GEB-EGB》-人工智能
  15. 软件开发流程与初始软件测试
  16. 虎牙在全球 DNS 秒级生效上的实践
  17. Ext GridPanel多选问题
  18. Centos7 安装DB2
  19. netstat查看CLOSE_WAIT过多
  20. 【无标题】求一个同款圣诞树视频,女朋友想要,价钱随便开。

热门文章

  1. PHP合并数组的效率
  2. 2017-滴滴出行-安全岗笔试
  3. 实验四 房屋价格预测
  4. html怎样图片不会失真,如何解决图片放大画质失真问题
  5. 高新技术企业认定全攻略
  6. Sensor简介(一):摄像头模组CCM的结构和原理简述
  7. STM32调试诊断工具 | STM32CubeMonitor介绍、下载、安装和使用教程
  8. Java虚拟机之垃圾回收详解一
  9. linux颜色吸取工具,Pick:Linux下功能强大的拾色器
  10. 2021年低压电工考试资料及低压电工模拟试题