TLS上的PYTHON-imap
我正在创建一个邮件捕获python程序。我正面临一个特定邮箱的问题。以下是使用PHP imap_open的参数:TLS上的PYTHON-imap,python,imap,imaplib,Python,Imap,Imaplib,我正在创建一个邮件捕获python程序。我正面临一个特定邮箱的问题。以下是使用PHP imap_open的参数: 'hostname' => "{XXX.XX.X.XX:143/imap/tls/novalidate-cert}", 'login' => "XXXXX", 'password' => "XXXXX", 我正在使用python尝试以下操作,但出现以下错误: Traceback (most recent call las
'hostname' => "{XXX.XX.X.XX:143/imap/tls/novalidate-cert}",
'login' => "XXXXX",
'password' => "XXXXX",
我正在使用python尝试以下操作,但出现以下错误:
Traceback (most recent call last):
File "scripts/MailCapture/check_folders.py", line 35, in <module>
conn.starttls()
File "/usr/lib/python3.7/imaplib.py", line 812, in starttls
server_hostname=self.host)
File "/usr/lib/python3.7/ssl.py", line 412, in wrap_socket
session=session
File "/usr/lib/python3.7/ssl.py", line 853, in _create
self.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
OSError: [Errno 0] Error
hostname = 'XXX.XX.X.X'
port = 143
isSSL = False
login = 'XXXXX'
password = 'XXXXX'
tls = ssl.create_default_context()
try:
conn = IMAP4(hostname, port)
conn.starttls(ssl_context=tls)
except (gaierror, IMAP4_SSL.error) as e:
sys.exit('Error while connecting to ' + hostname + ' on port ' + str(port) + ' : ' + str(e))
try:
conn.login(login, password)
except (gaierror, IMAP4_SSL.error) as e:
sys.exit('Error while login to ' + hostname + ' on port ' + str(port) + ' : ' + str(e))
回溯(最近一次呼叫最后一次):
文件“scripts/MailCapture/check_folders.py”,第35行,在
康涅狄格州斯塔特尔斯
文件“/usr/lib/python3.7/imaplib.py”,第812行,在starttls中
服务器(主机名=self.host)
文件“/usr/lib/python3.7/ssl.py”,第412行,在wrap_套接字中
会话=会话
文件“/usr/lib/python3.7/ssl.py”,第853行,在创建
self.do_握手
文件“/usr/lib/python3.7/ssl.py”,第1117行,在do_握手中
赛尔夫:握手
操作错误:[错误号0]错误
主机名='XXX.XX.X.X'
端口=143
isSSL=False
登录名='XXXXX'
密码='XXXXX'
tls=ssl.create\u default\u context()
尝试:
conn=IMAP4(主机名、端口)
conn.starttls(ssl\U上下文=tls)
除了(GAIP4_SSL.error,IMAP4_SSL.error)外,其他为e:
sys.exit('连接到端口'+str(port)+'上的'+hostname+'时出错:'+str(e))
尝试:
conn.login(登录名、密码)
除了(GAIP4_SSL.error,IMAP4_SSL.error)外,其他为e:
sys.exit('在端口'+str(port)+'上登录'+hostname+'时出错:'+str(e))
我尝试不使用conn.starttls()
,在端口143上登录到XXX.XX.X.XX时出现以下错误错误:登录命令错误:错误[b'接收的命令处于无效状态。]
有什么想法吗?也许是因为novalidate证书的缘故,它在PHP中工作,Python中有这样的选项吗
谢谢服务器真的支持STARTTLS吗?它实际上是TLS(而不是starttls)服务器吗?您是否可以打开调试,使其打印协议跟踪(例如,在创建任何IMAP4对象之前运行imaplib.Debug=5),而无需imaplib.Debug。我尝试在端口143上使用telnet进行连接。在使用登录方法之前,我必须启动STARTTLS命令。它对我们其他人仍然有用。服务器是否真的支持STARTTLS?它实际上是TLS(而不是starttls)服务器吗?您是否可以打开调试,使其打印协议跟踪(例如,在创建任何IMAP4对象之前运行imaplib.Debug=5),而无需imaplib.Debug。我尝试在端口143上使用telnet进行连接。在使用登录方法之前,我必须启动STARTTLS命令。它对我们其他人仍然有用。