【发布时间】:2013-07-07 18:03:44
【问题描述】:
我正在使用以下代码使用 python stmp lib 发送电子邮件。但是当我在 unix 中执行代码时,它会手动执行,即控制台等待,就好像它在等待我输入一些东西一样。我必须按 ctrl+Z 退出程序。
#!/usr/bin/python
import smtplib
from email.mime.text import MIMEText
textfile = '/my/folder/file.log'
fp = open(textfile, 'rb')
msg = MIMEText(fp.read())
fp.close()
msg['Subject'] = 'The contents of %s' % textfile
msg['From'] = "myid@company.com"
msg['To'] = "myid@company.com"
s = smtplib.SMTP('company.server.name')
s.sendmail("myid@company.com", "myid@company.com", msg.as_string())
s.quit()
你能告诉我哪里出错了吗?
【问题讨论】:
-
将
print语句放在其中一些行之间以找出卡住的位置。另外,请注意 Ctrl-Z 不会退出程序,它只是暂停它。您可能会暂停其中一些进程,这可能会产生后果,具体取决于它们持有的资源。 -
另外,如果你按下 Ctrl-C 而不是 Ctrl-Z,它不仅会退出程序,还会打印一个追溯显示 Python 卡住的位置。如果回溯中的第一行是
s = smtplib.SMTP('company.server.name'),您就知道问题出在连接或登录到服务器上。如果是s.sendmail(blah blah),您就知道它正在发送消息。以此类推。 -
我卡在
s = smtplib.SMTP('company.server.name') -
这不是我问的。一台机器可能还活着,但没有监听 SMTP 端口。 (另外,你在哪个 Unix 上
ping打印出company.server.name is alive?) -
好的,然后使用
telnet。同时,如果您不了解 Unix 系统管理员的基础知识,例如如何判断服务器是否正在运行,您可能会在superuser.com 获得比这里更好的帮助。无论如何,如果没有像“220 server.company.name blah blah ready at blah”这样的横幅,那就是问题所在——没有 SMTP 服务器。如果您收到横幅,请输入HELO my.computer.name,您应该会收到“250 server.company.name blah Hello blah”响应。
标签: python email python-2.6