本文实例讲述了Python实现读取邮箱中的邮件功能。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string # 确定运行环境的encoding __g_codeset = sys.getdefaultencoding() if "ascii" = = __g_codeset: __g_codeset = locale.getdefaultlocale()[ 1 ] # def object2double(obj): if (obj = = None or obj = = ""): return 0 else : return float (obj) #end if # def utf8_to_mbs(s): return s.decode( "utf-8" ).encode(__g_codeset) # def mbs_to_utf8(s): return s.decode(__g_codeset).encode( "utf-8" ) # host = 'pop.exmail.qq.com' username = 'user1@xxxx.cn' password = 'password' pop_conn = poplib.POP3_SSL(host) pop_conn.user(username) pop_conn.pass_(password) #Get messages from server: # 获得邮件 messages = [pop_conn.retr(i) for i in range ( 1 , len (pop_conn. list ()[ 1 ]) + 1 )] #print messages #print "--------------------------------------------------" # Concat message pieces: messages = [ "\n" .join(mssg[ 1 ]) for mssg in messages] #print messages #Parse message intom an email object: # 分析 messages = [parser.Parser().parsestr(mssg) for mssg in messages] i = 0 for index in range ( 0 , len (messages)): message = messages[index]; i = i + 1 ; subject = message.get( 'subject' ) h = email.Header.Header(subject) dh = email.Header.decode_header(h) subject = unicode (dh[ 0 ][ 0 ], dh[ 0 ][ 1 ]).encode( 'utf8' ) mailName = "mail%d.%s" % (i, subject) f = open ( '%d.log' % (i), 'w' ); print >> f, "Date: " , message[ "Date" ] print >> f, "From: " , email.utils.parseaddr(message.get( 'from' ))[ 1 ] print >> f, "To: " , email.utils.parseaddr(message.get( 'to' ))[ 1 ] print >> f, "Subject: " , subject print >> f, "Data: " j = 0 for part in message.walk(): j = j + 1 fileName = part.get_filename() contentType = part.get_content_type() mycode = part.get_content_charset(); # 保存附件 if fileName: data = part.get_payload(decode = True ) h = email.Header.Header(fileName) dh = email.Header.decode_header(h) fname = dh[ 0 ][ 0 ] encodeStr = dh[ 0 ][ 1 ] if encodeStr ! = None : fname = fname.decode(encodeStr, mycode) #end if fEx = open ( "%s" % (fname), 'wb' ) fEx.write(data) fEx.close() elif contentType = = 'text/plain' : # or contentType == 'text/html': #保存正文 data = part.get_payload(decode = True ) content = str (data); if mycode = = 'gb2312' : content = mbs_to_utf8(content) #end if nPos = content.find( '降息' ) print ( "nPos is %d" % (nPos)) print >> f, data #end if #end for f.close() #end for pop_conn.quit() |
希望本文所述对大家Python程序设计有所帮助。