--- smtplib.py 2008-05-29 09:39:26.000000000 -0700 +++ smtplibx.py 2009-10-22 10:44:01.750000000 -0700 @@ -694,7 +694,10 @@ (code,resp) = self.mail(from_addr, esmtp_opts) if code != 250: - self.rset() + if code == 421: + self.close() + else: + self.rset() raise SMTPSenderRefused(code, resp, from_addr) senderrs={} if isinstance(to_addrs, basestring): @@ -703,13 +706,19 @@ (code,resp)=self.rcpt(each, rcpt_options) if (code != 250) and (code != 251): senderrs[each]=(code,resp) + if code == 421: + self.close() + raise SMTPRecipientsRefused(senderrs) if len(senderrs)==len(to_addrs): # the server refused all our recipients self.rset() raise SMTPRecipientsRefused(senderrs) (code,resp) = self.data(msg) if code != 250: - self.rset() + if code == 421: + self.close() + else: + self.rset() raise SMTPDataError(code, resp) #if we got here then somebody got our mail return senderrs