diff options
Diffstat (limited to 'Lib/smtplib.py')
-rwxr-xr-x | Lib/smtplib.py | 142 |
1 files changed, 71 insertions, 71 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py index a45d95a..24e46ad 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -53,7 +53,7 @@ class SMTP: """ self.debuglevel = 0 self.file = None - self.helo_resp = None + self.helo_resp = None if host: self.connect(host, port) def set_debuglevel(self, debuglevel): @@ -83,17 +83,17 @@ class SMTP: self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if self.debuglevel > 0: print 'connect:', (host, port) self.sock.connect(host, port) - (code,msg)=self.getreply() - if self.debuglevel >0 : print "connect:", msg - return msg + (code,msg)=self.getreply() + if self.debuglevel >0 : print "connect:", msg + return msg def send(self, str): """Send `str' to the server.""" if self.debuglevel > 0: print 'send:', `str` - if self.sock: + if self.sock: self.sock.send(str) else: - raise SMTPServerDisconnected + raise SMTPServerDisconnected def putcmd(self, cmd, args=""): """Send a command to the server. @@ -108,117 +108,117 @@ class SMTP: - server response code (e.g. '250', or such, if all goes well) Note: returns -1 if it can't read responce code. - server response string corresponding to response code - (note : multiline responces converted to a single, + (note : multiline responces converted to a single, multiline string) """ resp=[] - self.file = self.sock.makefile('rb') - while 1: + self.file = self.sock.makefile('rb') + while 1: line = self.file.readline() if self.debuglevel > 0: print 'reply:', `line` - resp.append(string.strip(line[4:])) - code=line[:3] - #check if multiline resp - if line[3:4]!="-": + resp.append(string.strip(line[4:])) + code=line[:3] + #check if multiline resp + if line[3:4]!="-": break try: errcode = string.atoi(code) except(ValueError): - errcode = -1 + errcode = -1 - errmsg = string.join(resp,"\n") - if self.debuglevel > 0: + errmsg = string.join(resp,"\n") + if self.debuglevel > 0: print 'reply: retcode (%s); Msg: %s' % (errcode,errmsg) return errcode, errmsg def docmd(self, cmd, args=""): - """ Send a command, and return it's responce code """ - - self.putcmd(cmd,args) - (code,msg)=self.getreply() - return code + """ Send a command, and return it's responce code """ + + self.putcmd(cmd,args) + (code,msg)=self.getreply() + return code # std smtp commands def helo(self, name=''): """ SMTP 'helo' command. Hostname to send for this command defaults to the FQDN of the local host """ - name=string.strip(name) - if len(name)==0: - name=socket.gethostbyaddr(socket.gethostname())[0] - self.putcmd("helo",name) - (code,msg)=self.getreply() - self.helo_resp=msg - return code + name=string.strip(name) + if len(name)==0: + name=socket.gethostbyaddr(socket.gethostname())[0] + self.putcmd("helo",name) + (code,msg)=self.getreply() + self.helo_resp=msg + return code def help(self): - """ SMTP 'help' command. Returns help text from server """ - self.putcmd("help") - (code,msg)=self.getreply() - return msg + """ SMTP 'help' command. Returns help text from server """ + self.putcmd("help") + (code,msg)=self.getreply() + return msg def rset(self): """ SMTP 'rset' command. Resets session. """ - code=self.docmd("rset") - return code + code=self.docmd("rset") + return code def noop(self): """ SMTP 'noop' command. Dosen't do anything :> """ - code=self.docmd("noop") - return code + code=self.docmd("noop") + return code def mail(self,sender): """ SMTP 'mail' command. Begins mail xfer session. """ self.putcmd("mail","from: %s" % sender) - return self.getreply() + return self.getreply() def rcpt(self,recip): """ SMTP 'rcpt' command. Indicates 1 recipient for this mail. """ - self.putcmd("rcpt","to: %s" % recip) - return self.getreply() + self.putcmd("rcpt","to: %s" % recip) + return self.getreply() def data(self,msg): """ SMTP 'DATA' command. Sends message data to server. Automatically quotes lines beginning with a period per rfc821 """ - #quote periods in msg according to RFC821 + #quote periods in msg according to RFC821 # ps, I don't know why I have to do it this way... doing: - # quotepat=re.compile(r"^[.]",re.M) - # msg=re.sub(quotepat,"..",msg) + # quotepat=re.compile(r"^[.]",re.M) + # msg=re.sub(quotepat,"..",msg) # should work, but it dosen't (it doubles the number of any # contiguous series of .'s at the beginning of a line, #instead of just adding one. ) - quotepat=re.compile(r"^[.]+",re.M) + quotepat=re.compile(r"^[.]+",re.M) def m(pat): return "."+pat.group(0) - msg=re.sub(quotepat,m,msg) - self.putcmd("data") - (code,repl)=self.getreply() - if self.debuglevel >0 : print "data:", (code,repl) - if code <> 354: - return -1 - else: - self.send(msg) - self.send("\n.\n") - (code,msg)=self.getreply() - if self.debuglevel >0 : print "data:", (code,msg) + msg=re.sub(quotepat,m,msg) + self.putcmd("data") + (code,repl)=self.getreply() + if self.debuglevel >0 : print "data:", (code,repl) + if code <> 354: + return -1 + else: + self.send(msg) + self.send("\n.\n") + (code,msg)=self.getreply() + if self.debuglevel >0 : print "data:", (code,msg) return code #some usefull methods def sendmail(self,from_addr,to_addrs,msg): """ This command performs an entire mail transaction. - The arguments are: + The arguments are: - from_addr : The address sending this mail. - to_addrs : a list of addresses to send this mail to - msg : the message to send. - This method will return normally if the mail is accepted for at least + This method will return normally if the mail is accepted for at least one recipiant. Otherwise it will throw an exception (either SMTPSenderRefused, SMTPRecipientsRefused, or SMTPDataError) - That is, if this method does not throw an exception, then someone + That is, if this method does not throw an exception, then someone should get your mail. - It returns a dictionary , with one entry for each recipient that was + It returns a dictionary , with one entry for each recipient that was refused. example: @@ -241,27 +241,27 @@ class SMTP: will return an empty dictionary. """ - if not self.helo_resp: - self.helo() + if not self.helo_resp: + self.helo() (code,resp)=self.mail(from_addr) if code <>250: - self.rset() - raise SMTPSenderRefused - senderrs={} + self.rset() + raise SMTPSenderRefused + senderrs={} for each in to_addrs: - (code,resp)=self.rcpt(each) - if (code <> 250) and (code <> 251): + (code,resp)=self.rcpt(each) + if (code <> 250) and (code <> 251): senderrs[each]=(code,resp) if len(senderrs)==len(to_addrs): - #th' server refused all our recipients + #th' server refused all our recipients self.rset() raise SMTPRecipientsRefused code=self.data(msg) - if code <>250 : + if code <>250 : self.rset() - raise SMTPDataError + raise SMTPDataError #if we got here then somebody got our mail - return senderrs + return senderrs def close(self): @@ -275,5 +275,5 @@ class SMTP: def quit(self): - self.docmd("quit") - self.close() + self.docmd("quit") + self.close() |