TLS上的PYTHON-imap

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

我正在创建一个邮件捕获python程序。我正面临一个特定邮箱的问题。以下是使用PHP imap_open的参数:

'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命令。它对我们其他人仍然有用。