在尝试使用IMAP协议连接网易163邮箱后尝试读取收件箱时服务器返回Unsafe Login. Please contact [email protected] for help报错。

网上广为流传的解决方案是使用神秘网址http://config.mail.163.com/settings/imap/[email protected]进行设置。经过测试该方法已经失效了,不必再做尝试。

解决方案

经过邮件询问报错原因是发送请求时没有包含imap id,回复如下:

关于您反馈的客户端问题,经核实,关于您反馈的客户端添加网易邮箱帐号出现的收信问题,经反馈核实是第三方客户端没有带imap id被判断为不安全登录,系统为了用户安全自动阻止该类登录。

IMAP ID是在RFC2971中定义的一个扩展IMAP指令,详情查阅该文档

对于我程序所使用的python imapcilent库来说,在login之后select文件夹之前使用文档中所述的id_方法向服务器发送ID命令客户端信息即可,文档链接

demo

from imapclient import IMAPClient

server = IMAPClient("imap.163.com", ssl=True, port=993)
server.login("<user>", "<passwd>")

server.id_({"name": "IMAPClient", "version": "2.1.0"})

messages = server.select_folder('INBOX')

一些碎碎念

从定义来看这个ID扩展只是客户端对自己身份的单方面声明而已,根本没有办法进行任何验证,不大能理解为什么要把不带这一字段的判断为不安全,另外在RFC2971的3. Specification中对于用途也有下面的说明:

The sole purpose of the ID extension is to enable clients and servers
to exchange information on their implementations for the purposes of
statistical analysis and problem determination.

以及

Servers MUST NOT deny access to or refuse service for a client
based on information from the ID command. Clients MUST NOT refuse
to operate or limit their operation with a server based on the ID
response.


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Pandas速查表 上一篇
Outlook和163邮箱IMAP、SMTP踩坑 下一篇