Python 发送多封电子邮件时smtplib已断开连接

Python 发送多封电子邮件时smtplib已断开连接,python,email,smtplib,Python,Email,Smtplib,我正在尝试使用SMTPlib使用python发送电子邮件。我可以用标准方式发送一封电子邮件。现在,我想发送多封电子邮件,应该有一种方法可以做到这一点,在发送电子邮件之前,无需登录并每次退出服务器。我尝试了以下方法。我将所有内容包装在SendEmail类中,并通过其init方法连接到服务器: class SendEmail: def __init__(self): self.username='username@yahoo.com'; self.password='passwor

我正在尝试使用SMTPlib使用python发送电子邮件。我可以用标准方式发送一封电子邮件。现在,我想发送多封电子邮件,应该有一种方法可以做到这一点,在发送电子邮件之前,无需登录并每次退出服务器。我尝试了以下方法。我将所有内容包装在SendEmail类中,并通过其init方法连接到服务器:

class SendEmail:

def __init__(self):
    self.username='username@yahoo.com';
    self.password='password';
    self.server=smtplib.SMTP('smtp.mail.yahoo.com',587);
    self.server.starttls();
    self.server.login(self.username,self.password);
现在,我尝试为类使用SendAnEmail方法来发送多封电子邮件:

def SendAnEmail(self,reciever):
    message='blah';

    try:
        self.server.sendmail(self.username,reciever,message);
        print 'Message Sent'
    except:
        self.server.quit();
        self.server=None;
当我声明类的一个瞬间,并第一次调用SendAnEmail时,它就工作了。 当我第二次调用它时,它会给我一个错误,说服务器已断开连接。 由于我没有销毁类实例,服务器是如何断开连接的? 这是怎么回事。我应该每次发送电子邮件时连接、登录并退出吗

因此,在主要功能方面:

def main():
    mail0=SendEmail();
    mail0.SendAnEmail('reciever1@yahoo.com');#this works
    time.sleep(60);
    mail0.SendAnEmail('reciever2@yahoo.com');#this does not work
删除time.sleep60-雅虎不会等那么长的30秒吗?并将关闭连接

还有几件事:

Python在行尾不需要分号 sendmail接受收件人列表,因此您可以一次性向多个收件人发送电子邮件。
这是我的主要问题。SMTPlib连接是否仅用于发送一封电子邮件?我认为server.login类似于在浏览器中登录阅读电子邮件,在浏览器中我登录,发送一堆电子邮件,并一直登录到注销。那么server.login不是这样工作的?我知道Python不需要分号。这只是我的一个CPP习惯。是的,我也可以处理多个收件人,但我只想检查为什么SMTP在对同一类实例的多个调用之间断开连接?您是否确实尝试过删除60秒睡眠,然后在同一SMTP实例上发送多封电子邮件?你会发现它会起作用。SMTP服务器不会永远保持您的连接打开,如果没有活动,它会在不到60秒的时间内关闭连接或注销您-我猜大约是30秒。你可以自己试试这些简单的测试。好吧,我试着改变60秒的睡眠时间。这很有效。谢谢。