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):
# CSV
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)
# TODO 编码处理需完善
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')
# 内容解析Message内容
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()
# 具体月份之后 "Mar 2021"/具体年 "2021"
obj.email_handle("user", "password", '发件人', '时间')
Python_POP3自动收取邮件脚本
最新推荐文章于 2023-10-09 18:46:22 发布