2012-10-02 143 views
0
的smtplib
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 

我試圖建立自己的smtplib.I我得到類型錯誤:「NoneType」對象不是可迭代當我嘗試
(代碼RESP)=自.data(msg)類型錯誤:「NoneType」對象不是可迭代:

self.data()被定義爲- 我正在使用self.data()將消息放到服務器上。

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) 
+2

self.data裏面有什麼? –

+0

我想self.data是一種方法,它缺少一個return語句..但它只是一個猜測...... – andrean

回答

1

我們不能從已發佈什麼self.data()正在做的代碼告訴我們,但它是從你的錯誤明顯,它返回None。如果試圖解開無,你會得到這樣的:

>>> (code, resp) = None 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'NoneType' object is not iterable 

發佈的代碼self.data()可能的幫助。經過額外的代碼

更新發布:

代碼(code, repl) = self.getreply()也可以拆包None [注:也有這兩個實例中self.data()。是否在self.data()sendmail()中提出異常?

而且

if code != 354: 
      #raise SMTPDataError(code, repl) 
      print "Err" 
else: 
    ... 

如果你的代碼354,你已經註釋掉raise和函數現在返回無。這也可能是問題所在。

相關問題