发布
社区首页 >问答首页 >python中的smtplib错误

python中的smtplib错误
EN

Stack Overflow用户
提问于 2014-11-19 23:17:36
回答 2查看 1.1K关注 0票数 0

我有一个python脚本,运行在raspeberry pi上,它监视我的服务器机房,定期给我发一封电子邮件,并制作其他东西。第一次运行脚本时,它会发送通知并正常工作,然后等待一段时间(5分钟或30分钟),这取决于是否触发了警报,所以我编写了一个for循环来等待。当循环结束时,脚本调用发送电子邮件的函数,python返回错误。有人能帮帮我吗?我也在debian 7.7.0机器上测试了它,我也遇到了同样的错误。下面是一个示例脚本和错误。提前谢谢。多姆。

代码语言:javascript
代码运行次数:0
复制
File "/usr/lib/python2.7/smtplib.py", line 361, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed

# Import
from time import sleep
import time
import smtplib
import sys
import string
smtp_server = "10.0.0.4" # mail server address
mail_from = "server@domain.com" 
mail_to = "user@gmail.com" 
mail_subj = "Server room notify" 

server = smtplib.SMTP(smtp_server)
valore = 24 # value for the funtion

def SendAlertEmail(t_value):
    log_t = time.strftime("%d/%m/%A %H:%M:%S ")
    Text = string.join("Server room notify \n " + str(log_t) + str(t_value))
    Body_email = string.join((
       "From: %s" % mail_from,
       "To: %s" % mail_to,
       "Subject: %s" % mail_subj,
       "",
       Text
       ), "\r\n")
    server.sendmail(mail_from,mail_to,Body_email)
    return

SendAlertEmail(valore) # calling from here works fine
for i in range(0,500):
    sleep(1)
    print(str(i))

SendAlertEmail(valore) # after 500 secs goes in error. Test on debian 7.7.0 python 2.7.3 gcc 4.7.2
EN

回答 2

Stack Overflow用户

发布于 2014-11-20 00:35:43

smtplib在创建SMTP对象时打开TCP连接。当超时可能已经关闭连接时,您可以尝试在不活动500秒后重新使用它。

您应该只保留服务器名称,并在您的使用案例中为每个连接创建一个新的SMTP对象,因为发送邮件之间的延迟太高。

票数 2
EN

Stack Overflow用户

发布于 2014-11-20 01:16:16

正如Serge Ballesta提到的,您应该为发送的每封电子邮件打开和关闭与服务器的连接。

几个月前,我用Python语言编写了一个发送电子邮件的类,您可以在这里找到:https://github.com/kmundnic/Habitus/blob/master/data_sender.py您创建了一个DataSender对象,它处理到服务器的连接。此外,它调用存储帐户和密码的JSON文件,因此您不会将其保存在代码中。

请随意使用它。它是从http://kutuma.blogspot.com/2007/08/sending-emails-via-gmail-with-python.html改编的,正如源代码开头的注释中所提到的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27020383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档