发送多封邮件时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()时,它是可以工作的。可是当我第二次调用它时,就出现了一个错误,提示服务器已经断开连接。既然我没有销毁这个类的实例,为什么服务器会断开呢?有没有什么办法解决这个问题?我每次发送邮件都要连接、登录和退出吗?
所以,在主函数中:
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秒?),然后就会关闭连接。
还有几点其他的事情:
- 在 Python 里,行末不需要分号。
sendmail()
可以接受一个收件人列表,这样你就可以一次性给多个收件人发邮件。