版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://blog.csdn.net/jony_online/article/details/108638571
写在前面
网上大部分在流传 通过网易开放的手动配置接口 http://config.mail.163.com/settings/imap/index.jsp?uid=xxxxxx@163.com 进行配置,这一方法早已失效,连接无法打开
废话不多说直接放结果:
关键在于,给邮件报文中 添加 “ID” 字段 参数
import imaplib
# 添加缺失的命令
imaplib.Commands['ID'] = ('AUTH')
conn = imaplib.IMAP4_SSL(port = '993',host = 'imap.163.com')
conn.login('XXXX@163.com','HJKHSHDFIWRNKJHI')
# 上传客户端身份信息
args = ("name","XXXX","contact","XXXX@163.com","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.com')
conn.login('XXXX@163.com','HJKHSHDFIWRNKJHI')
status, msgs = conn.select()
Python 使用 imaplib 连接网易邮箱,调用login函数连接邮箱后,继续调用select函数获取邮箱文件夹时提示:
SELECT Unsafe Login. Please contact kefu@188.com for help
imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED
邮箱中也会受到一封网易发来的邮件
原因分析:
网易官方给出了该错误提示的帮助文档,但是该文档中只展示了 java 的示例文档,Python 的米有,从网上找了一圈,大部分都是说用网易放出来的授权接口来进行解除限制,但实测该接口已经停用
http://config.mail.163.com/settings/imap/index.jsp?uid=xxxxxx@163.com
无奈之下,只能自己动手找解决办法:
首先,网易的帮助文档中提示,操作失败的原因是 网易邮箱 要求客户端发送 “身份” 信息,否则不允许连接。
网易之所以这么做,是基于 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.com","version","1.0.0","vendor","myclient")
typ, dat = conn._simple_command('ID', '("' + '" "'.join(args) + '")')
imapclient 使用方法参考
(引用自 https://blog.yrpang.com/posts/45207/)
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')
参考文档:
Python2 写的一个 imaplib 连接 Gmail 的例子:https://gist.github.com/magicshui/3788005
使用imapclient 连接 网易邮箱例子:https://blog.yrpang.com/posts/45207/
通过配置的解决办法(已失效)https://blog.csdn.net/suxuelian/article/details/94735085
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://blog.csdn.net/jony_online/article/details/108638571