使用python获取邮件主题
import poplib, traceback
from email.parser import Parser
from email.header import decode_header
# 邮件检测
def check(email_address, email_password, pop3_server, email_subject):
'''
:param email_address: 邮箱地址
:param email_password: 邮箱密码
:param pop3_server: 邮箱服务器
:param sub_email: 邮件主题
:return: sub_email 在指定 email_address 中, 则返回True, 否则返回False
'''
# 定义需要查找的主题 和 邮箱中的主题列表
sub = email_subject
result_list = []
# 连接并获取邮件内容
server = poplib.POP3(pop3_server)
server.set_debuglevel(1)
server.user(email_address)
server.pass_(email_password)
resp, mails, octets = server.list()
# 获取每封邮件的主题
index = len(mails)
for i in range(1, index):
try:
resp, lines, octets = server.retr(i)
# 编码格式列表
encode_list = ['utf-8', 'gbk', 'GB2312', 'GB18030']
for en in encode_list:
print(en)
try:
msg_content = b'\r\n'.join(lines).decode(en)
break
except:
print('更换编码方式重试')
messageObject = Parser().parsestr(msg_content)
msgSubject = messageObject["Subject"]
dh = decode_header(msgSubject)
print(dh)
if dh[0][1]:
result = dh[0][0].decode(dh[0][1])
result_list.append(result)
else:
result = dh[0][0]
result_list.append(result)
except:
print(traceback.print_exc())
# 检测所有的邮件主题
print(result_list)
if sub in result_list:
res = True
else:
res = False
return res
Note:
1- 获取内容:
1- 获取服务器中的邮件
resp, mails, octets = server.list()
2- 获取指定 num 封邮件
resp, lines, octets = server.retr(num)
3- lines中包含邮件中的大部分信息,包括:[From, To, Subject, Data]
messageObject = Parser().parsestr(msg_content)
msgSubject = messageObject["Subject"]
4- 将获取到的数据进行解码
dh = decode_header(msgSubject)