今天在自己写得shit山上继续堆。

问题如下:用python获取邮件的发送时间。
CSDN就是这个地方不太好:大牛基本上没有,假如有大牛也不屑于解决这种问题。

python有一个模块email,但是里面没有封装获取时间的函数。
只封装了获取邮件头的函数。
然后我想着凑合着用吧:

这是一个标准的邮件头:

Date: Tue, 30 Jul 2013 16:53:17 +0800
Received: from db-sysnoc-mailrelay3.db01.baidu (unknown [123.125.66.194])by newmx38.qq.com (NewMx) with SMTP id for <hongtenzone@foxmail.com>; Tue, 30 Jul 2013 16:53:16 +0800
X-QQ-SSF: 00500000010000010rF000C1040000r
X-QQ-mid: mx38t1375174396thkz17254
Received: from mail-out.sys.baidu.com (cq01-passport-mis00.cq01.baidu.com [10.46.78.11])by db-sysnoc-mailrelay3.db01.baidu.com (Postfix) with SMTP id 515EF798060for <hongtenzone@foxmail.com>; Tue, 30 Jul 2013 16:53:16 +0800 (CST)
From: =?UTF-8?B?YmFpZHU=?=<passport@baidu.com>
To: =?UTF-8?B?aG9uZ3RlbnpvbmVAZm94bWFpbC5jb20=?=<hongtenzone@foxmail.com>
Subject: =?UTF-8?B?55m+5bqm5LqR6YCB5L2gMTAwR+WtmOWCqOepuumXtOmAmuefpQ==?=
MIME-Version: 1.0
Content-Type: text/html;charset="UTF-8"
Content-Transfer-Encoding: base64

用mail的get获取Date函数,成功获取到

<Tue>

大家看一下原因:

我获取的是

Date: Tue, 30 Jul 2013 16:53:17 +0800

然后get Date这个函数,然后他给我返回的是逗号之前的数据 Tue。
获取了一个周信息。
我要一个周有什么用啊??????

手撕脚本。正则匹配走起。

第一步。获取邮件。

第二步,对邮件进行拼接

第三步,将文件编码为UTF-8,错误模式为replace(不管什么编码,反正英文不乱码就行)

第四步,正则匹配时间。

第五步,对时间转换格式。

成功获取时间。

没有一点点能力的不用往下看了,对有编程能力的不难,对小白……看了头疼(我写的都头疼)

获取一封邮件:使用python的poplib模块。

    p = poplib.POP3_SSL(pop3server)p.user(user)p.pass_(password)

其中,服务器地址、用户、密码都配好。

然后

mail = p.retr(100)[1]

获取序号为100的一封邮件。

由于email模块没有这个功能,就不用了,手撕。
这个模块获取的是bytes这个格式,所以要想拼接需要用的是b‘\n’。可以获取邮件所有内容。如果懒得处理的话,直接获取邮件头可以可以。索引值应该为0

mail = b'\n'.join(mail)

现在文件是bytes模式,进行转码。
转化成UTF-8格式。如果是GBK格式中文会乱码。
如果想都不乱码要写try……except……,如果单单获取时间不需要。
错误设置为replace。

mail = mail.decode('UTF-8', errors='replace')

然后,对Date: Tue, 30 Jul 2013 16:53:17 +0800这个时间字符串进行正则匹配。

正常人是不会用这个时间格式的,所以正则以后还要进行二次处理,换成我们常用的格式。

def add_time(mail):try:mail = mail.decode('UTF-8', errors='replace')get_date = re.search(r'Date:\s([A-Za-z]{1,3}),\s([0-9]{1,2})\s([A-Za-z]{1,3})\s([0-9]{1,4})\s([0-9]{1,2}):',mail)except Exception as e:print(e)return '{}-{}-{} {}时'.format(get_date.group(4), str(list(calendar.month_abbr).index(get_date.group(3))).zfill(2),str(get_date.group(2)).zfill(2), get_date.group(5))

注意一些细节:获取的月份由于使用了枚举,是数字,所以使用的时候必须进行转化为文本,然后才能进行填充。
或者自己构建一个表进行映射也可。

这样获取的时间就变成了:

2013-10-12 11时

当然,我只获取了时间的一部分,其他的我忽略掉了。

一些细节:

如果是中国发的邮件,其中通常有 +0800,说明我们是东八区的时区。如果是国外的邮件或者有些系统设置错误,不一定是东八区,所以尽量不要正则匹配+0800.

正则匹配有一个特性:如果没有获取到文本,他的返回值是NULL,而NULL是不支持GROUP这个功能的。所以,还要写一个故障处理模块。不然这个函数会直接崩溃退出。
第二个是:绝大多数邮件是符合这个时间模块的,但是如果是直接操作函数生成的邮件,可能就不符合这个时间模块的功能,所以就取不到。
取不到的话,写个故障处理,返回一个值就可以了,或者对应模块写个正则也行。
第三个,datetime这个模块如果没有获取正规的数据,就会出现索引不到的BUG,会返回索引无第十三个值的BUG。

这就是邮件中的发件时间(因为发件时间是在第一位的)。
把这个时间匹配出来,就可以存到EXCEL里面去了。

PYTHON 获取邮件发送时间相关推荐

  1. python能否实现邮件合并_Python 基于Python实现邮件发送

    基于Python实现邮件发送 by:授客 QQ:1033553122 测试环境: Python版本:Python 2.7 注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分享连接获 ...

  2. Python获取当前系统时间

    Python获取当前系统时间 import time #返回当前时间 def GetNowTime(): return time.strftime("%Y-%m-%d %H:%M:%S&qu ...

  3. python 获取当前日期和时间_python获取当前日期和时间的方法

    本文实例讲述了python获取当前日期和时间的方法.分享给大家供大家参考.具体如下: import datetime # Get a datetime object now = datetime.da ...

  4. python读取邮件发送日期和时间_Python读取指定日期邮件的实例

    背景:9月份有部分数据缺失,这部分数据在邮箱里,需要重新拉取,但是每天几百封邮件,总共有6.7万封邮件,使用stat()和retr(which)结合遍历很 耗时 基于如上背景,初始大致思路为: 使用二 ...

  5. 邮件发送时间怎么修改 python_使用python通过电子邮件发送日期时间

    我试图使用python脚本解析电子邮件的日期时间. 在我打开邮件时,邮件日期值如下所示... 1 2 3 4from: abcd@xyz.com to: def@xyz.com date: Tue, ...

  6. python进行邮件发送以及django中利用邮件注册激活功能

    协议 SMTP协议 SMTP的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议.它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮 ...

  7. 邮件发送时间怎么修改 python_Python_定时自动发送邮件

    虽然主流邮箱都可以定时发送邮件,但还是尝试用python写了一个定时发送邮件的脚本,设定好一个发送时间后,可以按下面步骤将文件通过QQ邮箱发送出去. 文件的最后修改及最后访问时间随机调整为发邮件前20 ...

  8. python判断邮件发送成功_(原创)python发送邮件

    这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件. 首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smt ...

  9. 【python】 邮件发送-----zmail

    1. zmail发送邮件-文本正文 操作步骤:导包 import zmail邮件内容,包含:主题(subject).正文(content_text)-文本格式,必须存在在一个字典中.发件人信息,包含: ...

最新文章

  1. commander.js
  2. 独家 | 利用Cosmos微服务改善Netflix视频质量
  3. css3-巧用选择器 “:target”
  4. python及其应用_Python及其应用部分答案
  5. 将团队迁移到可视化项目管理软件
  6. php redis decr,Redis Decr 命令
  7. php 数组作用域,如何在php中访问私有作用域命名空间数组数据?
  8. golang 关闭gc 并手动gc_Golang垃圾回收 屏障技术
  9. 排序序列排序算法总结(二)——快速排序、归并排序
  10. Nginx之11吸星大法 - (页面缓存)
  11. 本地管理表空间(LMT)
  12. jdk32位安装包下载_premiere pro 2017 软件下载及安装教程
  13. 数学建模酶促反应matlab求解,数学建模实验指导书2011
  14. 苹果手机制作铃声 (简易版)
  15. 正则表达式-包含数字和字母的组合
  16. onload js函数不执行的原因分析及解决方法
  17. 整理的大学生所需信息的各个网站首页
  18. 上饶“智慧城市”生活:家居出行购物医疗全覆盖
  19. UTC时间与北京时间的关系(2010-06-13 15:35:02)
  20. Chrome浏览器插件开发-淘宝自动登录

热门文章

  1. 【GD32】GD32读取ADC数据
  2. YoutubeAPI使用
  3. vue内容横向循环滚动_在Vue中使用better-scroll实现横向滚动和竖向滚动
  4. 中国RFID行业市场前景规划与运营模式分析报告2022-2028年版
  5. 关于 android 虚拟机显示在了界面里面,怎么把模拟器放到到android studio窗口外面这件事
  6. TCP/IP详解(卷1)勘误表
  7. 换种思路解释自我管理
  8. aws eks_在带aws eks的kubernetes上部署带舵的破折号
  9. 3.2 项目(多肉)
  10. 用毕安格将投影坐标的3dmax模型转换为3dtiles