admin管理员组

文章数量:1530037

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:http://blog.csdn/jony_online/article/details/108638571

写在前面

网上大部分在流传 通过网易开放的手动配置接口 http://config.mail.163/settings/imap/index.jsp?uid=xxxxxx@163 进行配置,这一方法早已失效,连接无法打开

废话不多说直接放结果:

关键在于,给邮件报文中 添加 “ID” 字段 参数

import imaplib

# 添加缺失的命令
imaplib.Commands['ID'] = ('AUTH')

conn = imaplib.IMAP4_SSL(port = '993',host = 'imap.163')
conn.login('XXXX@163','HJKHSHDFIWRNKJHI')

# 上传客户端身份信息
args = ("name","XXXX","contact","XXXX@163","version","1.0.0","vendor","myclient")
typ, dat = conn._simple_command('ID', '("' + '" "'.join(args) + '")')
print(conn._untagged_response(typ, dat, 'ID'))

status, msgs = conn.select()

问题描述:

import imaplib

conn = imaplib.IMAP4_SSL(port = '993',host = 'imap.163')
conn.login('XXXX@163','HJKHSHDFIWRNKJHI')
status, msgs = conn.select()

Python 使用 imaplib 连接网易邮箱,调用login函数连接邮箱后,继续调用select函数获取邮箱文件夹时提示:

SELECT Unsafe Login. Please contact kefu@188 for help

imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED

 

 

邮箱中也会受到一封网易发来的邮件


原因分析:

网易官方给出了该错误提示的帮助文档,但是该文档中只展示了 java 的示例文档,Python 的米有,从网上找了一圈,大部分都是说用网易放出来的授权接口来进行解除限制,但实测该接口已经停用

http://config.mail.163/settings/imap/index.jsp?uid=xxxxxx@163

无奈之下,只能自己动手找解决办法:


首先,网易的帮助文档中提示,操作失败的原因是 网易邮箱 要求客户端发送 “身份” 信息,否则不允许连接。

网易之所以这么做,是基于 RFC 2971 协议,该协议主要内容就是规定 IMAP4 ID extension 的通信规则。所以并不是网上疯传的网易邮箱为了圈地,封禁其他客户端,强制要求使用网易客户端的原因。事实上,Gmail 邮箱也是要求客户端遵守这一协议的。

研究发现,Gmail 关于ID信息的描述是这样的:

这里用到 “ID” 向服务器上传身份信息,然而IMAP Commands 列表中并没有 ID 指令:

因此需要将 “ID” 指令添加到 IMAP的Commands 列表中

imaplib.Commands['ID'] = ('AUTH')

进一步地,需要构建指令传输命令:

args = ("name","XXXX","contact","XXXX@163","version","1.0.0","vendor","myclient")
typ, dat = conn._simple_command('ID', '("' + '" "'.join(args) + '")')

 

imapclient 使用方法参考

(引用自 https://blog.yrpang/posts/45207/)

from imapclient import IMAPClient

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

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

messages = server.select_folder('INBOX')

参考文档:

Python2 写的一个 imaplib 连接 Gmail 的例子:https://gist.github/magicshui/3788005

使用imapclient 连接 网易邮箱例子:https://blog.yrpang/posts/45207/

通过配置的解决办法(已失效)https://blog.csdn/suxuelian/article/details/94735085


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:http://blog.csdn/jony_online/article/details/108638571

本文标签: 网易解决办法邮箱提示imaplib