我使用python中的poplib模块收取电子邮件并进行解码,具体代码如下
import poplib # 邮件服务器地址
# email部分国内有些电子邮箱需要去掉@以后的内容
email = 'i@sohu.com'
password = '0QF'
pop3_server = 'pop3.sohu.com'
# 连接邮件服务器
server = poplib.POP3(pop3_server)
server.user(email)
server.pass_(password)
# 获取邮件总数
mail_count = server.stat()[0]
print(f'总邮件数:{mail_count}')
mailNum = 10
# 循环读取每一封邮件
Num_unencode = 0
Unencodelist = []
for i in range(mail_count - mailNum + 1, mail_count + 1):
print(i)
resp, mail_data, octets = server.retr(i - 1)
# 将邮件数据转换为字符串
mailstr = ''
for listmail in mail_data:
try:
# 尝试用GB2312解码
b = str(listmail, encoding='gb2312')
# 将解码的内容链接成字符串
mailstr = mailstr + b
except:
try:
# 尝试用GBK解码
b = str(listmail, encoding='gbk')
# 将解码的内容链接成字符串
mailstr = mailstr + b
except:
try:
# 尝试用GBK解码
b = str(listmail, encoding='utf-8')
# 将解码的内容链接成字符串
mailstr = mailstr + b
except:
# 无法解码的内容也链接到字符串中
b = str(listmail)
c = b[3:-1]
mailstr = mailstr + c
# 显示无法解码的字符串
print(f'无法解码每句话:{c}')
# 无法解码的内容计数
Num_unencode = Num_unencode + 1
Unencodelist.append(c)
print(f'第{i}封邮件内容为:{mailstr}')
server.quit()
print(f'无法解码的语句个数为:{Num_unencode}')
print(f'无法解码的语句为:{Unencodelist}')
for list1 in Unencodelist:
print(list1)