今天玩一下python得邮件解析吧,查看邮件内容小儿科,我们下载邮件的附件

直男,直接上代码。

自己看打印的内容

主要功能如下:

#如果邮件内容存在链接则返回链接,若不存在则直接下载邮件附件

 1 import imapclient,re
 2 import pyzmail
 3
 4
 5 #提取邮件里面的链接
 6 def getDowmlodUrl():
 7     url = None
 8     #这里是腾讯企业邮箱,其他的自行百度
 9     imapObj = imapclient.IMAPClient(‘imap.exmail.qq.com‘,ssl=True)
10     #邮箱和密码
11     imapObj.login(‘[email protected]‘,‘xxxxxxx‘)
12     #默认收件箱
13     imapObj.select_folder(‘INBOX‘,readonly=True)
14     #搜索未读邮件,打印未读邮件的UID
15     UIDS = imapObj.search(‘UNSEEN‘)
16     print(UIDS)
17     #UIDS = imapObj.search(‘ALL‘)#搜索全部的邮件
18     if len(UIDS) >= 1:#存在未读邮件
19         #获得邮件内容
20         rawMessage = imapObj.fetch(UIDS[0],[b‘BODY[]‘])
21         #选择第一封未读邮件
22         messageObj = pyzmail.PyzMessage.factory(rawMessage[UIDS[0]][b‘BODY[]‘])
23         #打印邮件信息,可以根据这些信息进行筛选
24         print(messageObj.get_subject())#邮件主题
25         print(messageObj.get_addresses(‘from‘))#发件人
26         print(messageObj.get_addresses(‘to‘))#收件人
27         print(messageObj.get_addresses(‘cc‘))
28         print(messageObj.get_addresses(‘bcc‘))
29
30         #邮件内容不为空时
31         if messageObj.html_part != None:
32             messageContent = messageObj.html_part.get_payload().decode(messageObj.html_part.charset)
33             #打印邮件内容
34             print(type(messageContent),messageContent)
35             #提取邮件内容里面的链接
36             pattern = re.compile(r‘//[0-9A-Za-z./\\?\\=\\:]+‘)
37             m = re.search(pattern,messageContent)
38             print(‘m‘,m)
39             if m is not None:
40                 print(‘http:‘ + m.group(0))
41                 url = ‘http:‘ + m.group(0)
42             #如果没有则取提起邮件的附件
43             else:
44                 for part in messageObj.walk():
45                     # name = part.get_param(‘name‘)
46                     if part.get_filename() != None:
47                         # print(part,part.get_filename())
48                         with open(part.get_filename(), ‘wb‘) as f:
49                             f.write(part.get_payload(decode=True))
50             #设置邮件已读
51             imapObj.set_flags(rawMessage, b‘\\Seen‘, silent=False)
52         else:
53             pass
54     #退出邮件
55     imapObj.logout()
56     #如果邮件内容存在链接则返回链接,若不存在则直接下载邮件附件
57     return url
58
59 getDowmlodUrl()

原文地址:https://www.cnblogs.com/lelexiu/p/11187967.html

时间: 2024-10-08 23:27:36

今天玩一下python得邮件解析吧,查看邮件内容小儿科,我们下载邮件的附件的相关文章

玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1 一.集合 1.set 无序,不重复序列 {}创建,直接写元素 2.set功能 __init__()构造方法,,使用强制转换就会调用此方法 1 set1 = {'year', 'jiujiujiu'} 2 print(type(set1)) 3 # 创建集合 4 s = set() # 创建空集合 5 li = [11, 22, 11, 22] 6 s = set(li) set 3.集合的基本操作 1 # 操作集合 2 s1 = set() 3 s1.a

玩转Python让人讨厌的编码问题

Python的编码问题基本是每个新手都会遇到的坎,但只要完全掌握了就跳过了这个坑,万变不离其中,这不最近我也遇到了这个问题,来一起看看吧. 事情的起因是review同事做的一个上传功能,看下面一段代码,self.fp是上传的文件句柄 fpdata = [line.strip().decode('gbk').encode('utf-8').decode('utf-8') for line in self.fp] data = [''.join(['(', self.game, ',', ','.j

[Python]BeautifulSoup—HTML解析包

今天真机调试的时候莫名其妙遇到了这样的一个问题: This product type must be built using a provisioning profile, however no provisioning profile matching both the identity "iPhone Developer" and the bundle identifier..... 具体如下图所示: 十分蛋疼, 发现不管是从网上下的demo, 还是自己的过程.凡事真机测试的时候都

玩蛇(Python)笔记之基础Part2

玩蛇(Python)笔记之基础Part2 一.列表 1.列表 别的语言叫数组 python牛逼非要取个不一样的名字 1 age = 23 2 name = ["biubiubiu", "jiujiujiu", 22, age] 3 # namecopy = name 4 # namecopy.pop() 5 print(name) 6 # print(namecopy) List 2.列表取值 正常index 从零开始,,取倒数加负号 倒数第一就是[-1] 3.列表

从零单排之玩转Python安全编程(II)

转自:http://www.secpulse.com/archives/35893.html 都说Python大法好,作为一名合格的安全从业人员,不会几门脚本语言都不好意思说自己是从事安全行业的. 而Python是最容易入门且使用最顺手的脚本语言,为了不引起程序员世界大战,我们不说Python是世界上最好的语言,没有之一. 这是<从零单排之玩转Python安全编程>的第二篇.第一篇参见安全脉搏<从零单排之玩转Python安全编程(I)> 本教程继续展示一些基本的Python脚本概念

玩转python之字符串逐个字符或逐词反转

众所周知,python中的字符串是无法改变的,反转一个字符串自然要创建一个拷贝:嘴简单的方法,当然是步长为“-1”的切片: result = astring[::-1] 如果要是按单词来反转,需要三步完成:字符串--->单词列表.反转列表.单词列表--->字符串: 1 result = astring.split() 2 result.reverse() 3 result = ' '.join(result) 如果喜欢简练和紧凑的一行代码,可以这样做:result = ' '.join(ast

Python中用ElementTree解析XML

[XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. 概念一: <foo> # foo元素的起始标签 </foo> # foo元素的结束标签 # note: 每一个起始标签必须有对应的结束标签来闭合, 也可以写成<foo/> 概念二: <foo> # 元素可以嵌套到任意参次 <bar></bar> # bar元素为foo元素的子元素 </f

玩转python之测试一个对象是否是类字符串

提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个对象,尤其是当写一个函数或者方法时,经常需要测试传入的参数是否是一个字符串: 下面这个方法利用了内建的isinstance和basestring来简单快速检查某个对象是否是字符串或者Unicode对象: def is_string(anobj): return isinstance(anobj, b

玩转python之每次处理一个字符

在Python中字符就是长度为1的字符串,所以可以循环遍历一个字符串,依次访问每一个字符,得到你想要的处理前提: 一个列表是个好主意,就像这样:thelist = list(thestring) 当然,完全可以不用列表,对于喜欢循环遍历的人,他们有足够的理由这么做,因为并没有创建列表的过程: for c in thestring: do_something_with(c) 知道列表推导的人,肯定不屑于上面的写法,因为下面的代码是他们常引以为豪的: results = [do_something_