版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013491262/article/details/79753337
import poplib
import email
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
from bs4 import BeautifulSoup
def decode_str(s):
return s
value, charset = decode_header(s)[0]
if charset:
value = value.decode(charset)
return value
def guess_charset(msg):
# 先从msg对象获取编码:
charset = msg.get_charset()
if charset is None:
# 如果获取不到,再从Content-Type字段获取:
content_type = msg.get('Content-Type', '').lower()
pos = content_type.find('charset=')
if pos >= 0:
charset = content_type[pos + 8:].strip()
return charset
def get_email_headers(msg):
headers = {}
for header in ['From', 'To', 'Subject', 'Date']:
value = msg.get(header, '')
if value:
if header == 'Date':
headers['date'] = value
if header == 'Subject':
subject = decode_str(value)
headers['subject'] = subject
else:
hdr, addr = parseaddr(value)
name = decode_str(hdr)
value = u'%s <%s>' % (name, addr)
if header == 'From':
from_address = value
headers['from'] = from_address
else:
to_address = value
headers['to'] = to_address
return headers
# indent用于缩进显示:
def get_email_cntent(message):
j = 0
content = ''
for part in message.walk():
j = j + 1
file_name = part.get_filename()
contentType = part.get_content_type()
if file_name: # 保存附件
pass
elif contentType == 'text/plain' or contentType == 'text/html':
data = part.get_payload(decode=True)
charset = guess_charset(part)
if charset:
charset = charset.strip().split(';')[0]
# data = data.decode(charset)
content = data
return content
if __name__ == '__main__':
emailaddress = ''
password = ''
pop3_server = ''
server = poplib.POP3(pop3_server)
print(server.getwelcome())
server.user(emailaddress)
server.pass_(password)
messagesCount, messagesSize = server.stat()
print('邮件数量:', messagesCount)
print('占用空间:', messagesSize)
resp, mails, octets = server.list()
print('------ resp ------')
print(resp)
print('------ mails ------')
print(mails)
print('------ octets ------')
print(octets)
print("****************要第几篇就传几*******************************************************************")
resp, lines, octets = server.retr(423)
msg_content = "" ;
for le in lines:
msg_content = msg_content + str(le, encoding = "utf-8")
msg_content = msg_content + "\n"
msg = Parser().parsestr(msg_content)
msg_headers = get_email_headers(msg)
content = get_email_cntent(msg)
print('subject:', msg_headers['subject'])
print('from_address:', msg_headers['from'])
print('to_address:', msg_headers['to'])
print('date:', msg_headers['date'])
bs = BeautifulSoup(content, "lxml")
print(bs.prettify())
server.quit()