importimaplib client = imaplib.IMAP4_SSL(host="imap.163.com", port=993) client.login("username", "password") client.select()
#('NO', [b'SELECT Unsafe Login. Please contact kefu@188.com for help'])
原因分析
解决方案
importimaplib imaplib.Commands["ID"] = "NONAUTH" client = imaplib.IMAP4_SSL(host="imap.163.com", port=993) client.login("username", "password") client._simple_command("ID",'("name" "test" "version" "0.0.1")') client.select()
- 是否有可能某些邮箱服务器不支持 ID 命令?
- 如果邮箱支持 ID 命令,但并不强制使用,会对其他正常功能有影响吗?
importimaplib imaplib.Debug = 100imaplib.Commands["XXX"] = "NONAUTH" host = "imap.163.com" #host = "imap.qq.com" client = imaplib.IMAP4_SSL(host=host, port=993) client._simple_command("XXX", '("name" "aaa")') client.select()
#b'PMGB1 BAD command not support'
日志如图
#b'* BAD Command!'
日志如图
#ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
- tag 是客户端在发送命令时携带的一个唯一标识,主要用于客户端区分收到的响应是那个命令的响应
- * 代表此命令的相应内容尚未完结,应继续等待后续响应
- + 代表服务端继续等待客户端发送尚未发送完的命令
importimaplib client = imaplib.IMAP4_SSL(host="imap.163.com", port=993) client.login("username", "password") typ, dat =client.select() if typ != "OK": try: client._simple_command("ID", '("name" "test" "version" "0.0.1")') exceptException as e: print(e) typ, dat =client.select() if typ != "OK": raise Exception("邮箱登录失败: {} {}".format(typ, dat))
- POP3 可以认为是只读的协议,客户端内的操作不会影响到服务端,只用来下载邮件
- IMAP 是双向的协议,客户端的操作会反馈到服务端上,服务端也同步进行操作,不仅可以下载邮件,还可以删除,移动邮件,但不能发送邮件
- SMTP 是用来发送邮件的