def sendmail(self, from_addr, to_addrs, msg='hello', mail_options=[],rcpt_options=[]):
self.ehlo_or_helo_if_needed()
esmtp_opts = []
if self.does_esmtp:
# Hmmm? what's this? -ddm
# self.esmtp_features['7bit']=""
if self.has_extn('size'):
esmtp_opts.append("size=%d" % len(msg))
for option in mail_options:
esmtp_opts.append(option)
(code, resp) = self.mail(from_addr, esmtp_opts)
if code != 250:
self.rset()
#raise SMTPSenderRefused(code, resp, from_addr)
senderrs = {}
if isinstance(to_addrs, basestring):
to_addrs = [to_addrs]
for each in to_addrs:
(code, resp) = self.rcpt(each, rcpt_options)
if (code != 250) and (code != 251):
senderrs[each] = (code, resp)
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()
#raise SMTPDataError(code, resp)
#if we got here then somebody got our mail
return senderrs
I am trying to build my own smtplib.I am getting TypeError: ‘NoneType’ object is not iterable when i try
(code, resp) = self.data(msg)
self.data() is defined as-
I am using self.data() to put the message to the server.
def data(self, msg):
self.putcmd("data")
(code, repl) = self.getreply()
if self.debuglevel > 0:
print>>stderr, "data:", (code, repl)
if code != 354:
#raise SMTPDataError(code, repl)
print "Err"
else:
q = quotedata(msg)
if q[-2:] != CRLF:
q = q + CRLF
q = q + "." + CRLF
self.send(q)
(code, msg) = self.getreply()
if self.debuglevel > 0:
print>>stderr, "data:", (code, msg)
return (code, msg)
We can’t tell from the code that you have posted what
self.data()is doing, but it is clear from your error that it is returningNone. If you try to unpack None, you get this:Posting the code for
self.data()might help.Update after extra code posted:
The code
(code, repl) = self.getreply()could also be unpackingNone[note: there are two instances of this inself.data()]. Is the exception raised inself.data()or insendmail()?Also
If you get code 354, you have commented out the
raiseand the function now returns None. That might also be the problem.