【问题标题】:Connect to IMAP Exchange with starttls in python 2.7 (not 3)在 python 2.7(不是 3)中使用 starttls 连接到 IMAP Exchange
【发布时间】:2015-01-29 12:23:49
【问题描述】:

我刚刚发现(不确定)python 3 支持 starttls connect 但不支持 python 2.7

但是我当前的大 python 代码在 python 2.7 上运行,所以不能立即移动到 3。

那么,我可以使用 imap 和 starttls 安全性连接到 Microsoft Exchange 服务器吗?

需要更多细节?

【问题讨论】:

  • 我希望为 imap 启用 starttls 安全性。该页面显示 smtp 的 starttls

标签: python python-2.7 starttls


【解决方案1】:

已经过去了一段时间,但我希望这对其他人有所帮助。您可以通过 Python 3 或 Python 2 使用 imaplib 通过 TLS 连接到 Exchange。

Python 3 有 IMAP4.starttls() 方法,Python 2 没有。对于 Python 2,请改用 IMAP4_SSL 子类。以下 sn-ps 来自通过 TLS 连接到 office365.com 的工作解决方案。

Python 3

from imaplib import IMAP4
. . .

    def _connect(self, host, username, password, use_tls=False):
        """Establishes an IMAP connection, optionally over TLS."""
        try:
            src = IMAP4(host)
            if use_tls:
                src.starttls()
            src.login(username, password)
        except . . .

Python 2

from imaplib import IMAP4, IMAP4_SSL
. . .

    def _connect(self, host, username, password, use_tls=False):
        """Establishes the IMAP connection, optionally over TLS."""
        try:
            src = IMAP4_SSL(host) if use_tls else IMAP4(host)
            src.login(username, password)
        except . . .

【讨论】:

  • 对我来说,IMAP4 引发异常(中止)并显示以下消息:unexpected response: 220 HE1PR02CA0073.outlook.office365.com Microsoft ESMTP MAIL Service ready at Tue, 21 Jun 2016 07:55:27 +0000。使用IMAP_SSL 会引发SSL: unknown protocol,我认为这是因为它不使用starttls。这种行为在 2 和 3 中基本相同。
  • IMAP_SSL 例外是:SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:645)
  • 你用的是什么版本的 Python?
  • 我? 2.7.12 和 3.5.2。
  • 嗨@pythonator。我希望在我的 sn-ps 中很清楚你应该在这两种情况下传递 use_tls=True (并覆盖默认值)。我可以确认这些都适用于 Office365 的 me
猜你喜欢
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2021-03-25
  • 2021-11-20
相关资源
最近更新 更多