2011-05-02 112 views
1

我正在尝试为我在我们的办公网络上运行的小监控脚本设置一些基本的电子邮件功能。在我的Ubuntu 10.10服务器上运行脚本(见下文)可以正常工作,但是当我在Windows桌面机上运行脚本时,它会在send: 'STARTTLS\r\n'上使用reply: '451 4.7.0 Timeout waiting for client input\r\n'超时。Python smtplib,启动时的超时时间

虽然我会在Linux服务器上运行这个,但我很好奇它为什么不能在Windows下工作。它是导致问题的不同的Python版本吗?

设置:

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

的Python机#1:Windows 7的SP1 64位,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 = "[email protected]" 
    TO = ["[email protected]"] 
    TEXT = '''\ 
    From: [email protected] 
    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

首先想到的是Windows防火墙阻止来自Python.exe可执行文件的出站套接字连接。您是否尝试过使用Python建立任何其他类型的连接,例如使用urllib2?如果是这样,结果如何?

假设您无法使用Python连接出来,请确保将Python.exe作为例外添加到Windows防火墙中。

+0

你好,谢谢你的回答。不幸的是,这似乎并不是解决方案。我用来抓取网页的另一个脚本运行良好,所以我认为这不是问题。无论哪种方式,我将python.exe作为Windows防火墙异常添加 - 仍是同样的问题。 – 2011-05-04 11:12:30

+0

好吧,因为您通过TLS使用SMTP(SMTPS),我假设您连接到TCP端口465?如果您打开命令提示符并输入“telnet exchange-serv 465”,会发生什么情况?我们需要确认您是否可以手动连接到SMTPS端口,以确保您在操作系统级别具有基本连接。 – jathanism 2011-05-04 15:38:54

+0

嗨,很抱歉没有回复你。这个问题被严重低估了,并且我可能在一段时间内无法解决它。感谢您的帮助。 :) – 2012-01-02 08:07:04