Python smtplib,starttls超时

1 投票
1 回答
2397 浏览
提问于 2025-04-16 16:48

我正在为我们办公室网络上运行的一个小监控脚本设置基本的邮件功能。在我的Ubuntu 10.10服务器上运行这个脚本(见下文)一切正常,但在我的Windows桌面电脑上运行时,在send: 'STARTTLS\r\n'这一步超时,收到的回复是reply: '451 4.7.0 Timeout waiting for client input\r\n'

虽然我最终会在Linux服务器上运行这个脚本,但我很好奇为什么在Windows下不行。是不是因为Python版本不同导致的问题呢?

设置:

SMTP服务器:Exchange 2010,Windows Server 2008 R2 x64

Python机器 #1:Windows 7 SP1 x64,Python 2.7.1 --- (失败)

Python机器 #2:Ubuntu服务器 10.10 x86,Python 2.6.6 --- (成功)

脚本:

# -*- coding: utf-8 -*-
import smtplib


def main():
    SERVER="exchange-serv"
    FROM = "valid@foo.com"
    TO = ["valid2@foo.com"]
    TEXT = '''\
    From: valid@foo.com
    Subject: testin'

    Test message
    '''

    server = smtplib.SMTP(SERVER)
    server.set_debuglevel(1)
    server.starttls()
    server.login('user', 'pass')
    server.sendmail(FROM, TO, TEXT)
    server.quit()


if __name__ == "__main__":
    main()

1 个回答

1

首先想到的就是,Windows防火墙可能在阻止Python.exe这个程序发起外部连接。你有没有尝试用Python建立其他类型的连接,比如用urllib2?如果尝试过,结果怎么样?

如果你发现用Python无法连接外部网络,那就要确保把Python.exe添加到Windows防火墙的例外列表里。

撰写回答