import poplib
from email.parser import Parser
import csv
class Email_pop3(object):
def __init__(self):
self.port = 995
self.addr = "pop.exmail.qq.com"
def email_handle(self, user, pwd, send_add, send_time):
f = open(user + '.csv', 'a+', encoding='utf-8-sig', newline='')
csv_writer = csv.writer(f)
csv_writer.writerow(["发件人", "时间", "主题", "内容"])
server = poplib.POP3(self.addr)
server.user(user)
server.pass_(pwd)
print('邮件总数:%s | 空间大小:%s' % server.stat())
resp, mails, octets = server.list()
print('邮件列表:', mails)
for index in range(len(mails), -1, -1):
resp, lines, octes = server.retr(index)
try:
msg_content = b'\r\n'.join(lines).decode('utf-8')
except UnicodeDecodeError as e:
try:
msg_content = b'\r\n'.join(lines).decode('gb2312')
except UnicodeDecodeError as e:
try:
msg_content = b'\r\n'.join(lines).decode('gbk')
except UnicodeDecodeError as e:
msg_content = b'\r\n'.join(lines).decode('gb18030')
msg = Parser().parsestr(text=msg_content)
From = msg.get('From', '')
To = msg.get('To', '')
Date = msg.get('Date', '')
Subject = msg.get('Subject', '')
content = msg.get_payload()
if send_add in From and send_time in Date:
for par in msg.walk():
if not par.is_multipart():
try:
data = par.get_payload(decode=True).decode()
except Exception as e:
data = par.get_payload(decode=True)
csv_writer.writerow([From, Date, Subject, data])
print(From, Date, 'Qualified, inserted successfully')
else:
print(From, Date, 'Unqualified insert failed')
if not send_time in Date:
break
obj = Email_pop3()
obj.email_handle("user", "password", '发件人', '时间')