在python中,使用poplib模块,对pop3服务器进行电子邮件的接收与解码,相关代码如下:
import poplib # 邮件服务器地址
from email.parser import Parser
# 设置邮箱用户名、密码、服务器
emailaddress = 'USERNAME'
password = 'PW'
pop3_server = 'mail.com'
# emailaddress其实是用户名,此处用户名可以是一个完整的邮件地址,也可以只是邮件地址的前缀,不包含@以后的内容
#将emailaddress进行分割,取前缀作为用户名
Emailuserlist = emailaddress.split(sep='@', maxsplit=-1)
# 连接邮件服务器
try:
# 尝试用全部的电子邮箱作为用户名
server = poplib.POP3(pop3_server)
server.user(emailaddress)
server.pass_(password)
except:
# 尝试用电子邮箱的前缀作为用户名
server = poplib.POP3(pop3_server)
server.user(Emailuserlist[0])
server.pass_(password)
msglist = []
# 获取邮件总数
mail_count = server.stat()[0]
print(f'总邮件数:{mail_count}')
mailNum = 5
# 循环读取每一封邮件
Num_unencode = 0
Unencodelist = []
# for i in range(mail_count - mailNum + 1, mail_count + 1):
for i in range(1, 6):
# print(i)
# resp, mail_data, octets = server.retr(i - 1)
resp, mail_data, octets = server.retr(i)
try:
# 尝试用UTF-8进行解码并将邮件数据合并为字符串
email_content = b'\r\n'.join(mail_data).decode('utf-8')
msglist.append(email_content)
except:
try:
# 尝试用gbk进行解码并将邮件数据合并为字符串
email_content = b'\r\n'.join(mail_data).decode('gbk')
msglist.append(email_content)
except:
try:
# 尝试用gb2312进行解码并将邮件数据合并为字符串
email_content = b'\r\n'.join(mail_data).decode('gb2312')
msglist.append(email_content)
except:
print('无法解析!')
Errmsg = f'第{i}封邮件无法解析!'
msglist.append(Errmsg)
print('\n')
print(f'第{i}封邮件内容如下:')
# print(email_content)
server.quit()
# print(msglist)
testmsg = msglist[4]
# print(testmsg)
# subject = Parser().parse(msglist)
msg_email = Parser().parsestr(testmsg)
print(type(msg_email))
print(msg_email)
str_from = msg_email["from"]
str_subject = msg_email["subject"]
print(str_from)
print(str_subject)