如何使用python中的poplib模块收取电子邮件并进行解码

在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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值