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

时间:2014-07-10 02:49:42

标签: python email smtplib

我正在尝试使用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()时,它可以工作。 当我第二次调用它时,它会给我一个错误,说服务器已断开连接。 由于我没有销毁类实例,服务器如何断开连接? 它是什么方式围绕它。我每次发送电子邮件时都应该连接,登录和退出吗?

所以,在main函数中:

def main():
    mail0=SendEmail();
    mail0.SendAnEmail('reciever1@yahoo.com');#this works
    time.sleep(60);
    mail0.SendAnEmail('reciever2@yahoo.com');#this does not work

1 个答案:

答案 0 :(得分:0)

删除time.sleep(60) - 雅虎不会等待那么久(30秒?)并关闭连接。

其他一些事情:

  1. Python在行尾不需要分号
  2. sendmail()接受收件人列表,以便您可以一次向多个收件人发送电子邮件。