本文实例讲述了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程序设计有所帮助。