【问题标题】:sending email using smtp in python not working在 python 中使用 smtp 发送电子邮件不起作用
【发布时间】: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


【解决方案1】:

正如@kwatford 在 cmets 中建议的那样尝试使用打印语句,发现代码执行卡在了

s = smtplib.SMTP('company.server.name').

正如@abarnert 建议的那样,尝试过

telnet company.server.name

由于错误而失败

telnet: Unable to connect to remote host: Connection timed out

因此,基本上无法连接到 smtp 服务器的代码导致了问题。

【讨论】:

  • 感谢您的解释。请接受这个答案。
猜你喜欢
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2016-04-17
相关资源
最近更新 更多