Python的imaplib模块支持以IMAP方式与IMAP4服务器交互,本文记录连接qq邮箱和163邮箱的测试过程。测试代码直接使用的参考文献2中的代码(代码如下),代码很简单,但是测试过程却一言难尽。
# coding=utf-8
import imaplib
import base64
connection=imaplib.IMAP4_SSL('imap.163.com',993)
username='XXXXXXXX@163.com'
password='XXXXXXXX'
try:
connection.login(username,password)
except Exception as err:
print('登录失败:',err)
connection.print_log()
res,data=connection.list()
print(res,data)
print(data[0])
res,msg_ids=connection.search(None,'ALL')
print(res,msg_ids)
res,msg_data=connection.fetch(data[0],'UID BODY[TEXT]')
print(msg_data)
connection.logout()
首先测试的是qq邮箱,一直在用的qq邮箱默认IMAP/SMTP服务关闭,如果要开启的话,必须先要升级到最新的密码保护。从网页登录qq网站申请密码保护,又提示账号有安全风险,要扫描登录或用手机qq登录。就接着用手机qq登录,手机登录时,先是要求验证码(拼图验证码+按顺序点字的验证方式),接着又要登录验证(扫码验证或辅助资料验证),然后手机号码验证、输入实名信息,最后是提供之前用过的密码,关键是密码一直都没有换过啊!!折腾了多半天,最后放弃(懒得找客服和qq好友),想着再申请个新的qq号测试算了,结果申请界面提示我操作太频繁,郁闷!
新申请了QQ账号后,进入邮箱,其界面与用旧账号登录的qq邮箱界面风格差别较大,在邮箱地址上点击后弹出下面的界面,点击设置链接。
在邮箱设置->常规中的第三方服务中可以设置IMAP/SMTP服务(POP3服务好像就没有了),默认是关闭状态。点击开启服务,结果提示新邮箱账号要2周后才能开启IMAP/SMTP服务,于是放弃测试qq邮箱。
转而测试163邮箱,在邮箱设置的POP3/SMTP/IMAP中开启IMAP/SMPT服务(默认应该就是开启的),开启时需要手机扫码向特定号码发信息,然后邮箱会提供授权密码(该密码仅会出现1次),上面测试代码就是使用该授权密码读取邮箱信息。
测试上述代码,结果运行时报下列错误,百度错误信息,有说要在调用search函数前要调用select函数的,也有说用网易放出来的授权接口来进行解除限制,测试了部分解决建议,但没有起作用。
通过测试,发现上述代码中能调的、不报错的只有list函数,于是精简测试代码,改成了下面的样子,这样程序可以正常运行,不过也仅限于连接、登录、列出、退出等操作,程序运行效果见下图。
# coding=utf-8
import imaplib
connection=imaplib.IMAP4_SSL('imap.163.com',993)
username='XXXXXXXX@163.com'
password='XXXXXXXX'
try:
connection.login(username,password)
except Exception as err:
print('登录失败:',err)
res,data=connection.list()
print(res,data)
print(data[0])
connection.logout()
后续会试试申请其它邮箱进行测试,但愿别这么麻烦!
参考文献
[1]https://docs.python.org/zh-cn/3/library/imaplib.html
[2]Python从菜鸟到高手