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

1 投票
1 回答
1543 浏览
提问于 2025-04-18 12:44

我正在尝试使用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

1 个回答

0

去掉 time.sleep(60) 这一行 - Yahoo 不会等那么久(大概30秒?),然后就会关闭连接。

还有几点其他的事情:

  1. 在 Python 里,行末不需要分号。
  2. sendmail() 可以接受一个收件人列表,这样你就可以一次性给多个收件人发邮件。

撰写回答