On May 6, 7:10 pm, Jean-Paul Calderone <exar...@divmod.com> wrote: > On Tue, 5 May 2009 22:17:35 -0700 (PDT), gganesh <ganesh....@gmail.com> wrote: > >On May 5, 9:25 pm, Piet van Oostrum <p...@cs.uu.nl> wrote: > >> >>>>> gganesh <ganesh....@gmail.com> (g) wrote: > >> >g> hi, > >> >g> I'm a beginner in using Python script > >> >g> I'm trying to send mails using multi-thread > >> >g> I wrote > >> >g> FROM = 'ganeshx...@xxxx.com' > >> >g> # for more mail add';' the another mail id > >> >g> listTo = ['g....@gmail.com', 'xxjango...@gmail.com', > >> >g> 'xx...@yahoo.co.in'] > >> >g> SUBJECT = 'This is the subject' > >> >g> MSGBODY = 'This the body of the message ' > >> >g> MAILSERVER = 'mail.xxxx.com' > >> >g> port = 25 > >> >g> username = 'xxxxx' > >> >g> password = 'xxxxx' > >> >g> # trim the strings of any leading or trailing spaces > >> >g> FROM = FROM.strip() > >> >g> SUBJECT = SUBJECT.strip() > >> >g> MSGBODY = MSGBODY.strip() > >> >g> MAILSERVER = MAILSERVER.strip() > >> >g> username = username.strip() > >> >g> password = password.strip() > >> >g> #Connect to server > >> >g> print 'Connecting to mail server ', MAILSERVER > >> >g> try: > >> >g> s = smtplib.SMTP(MAILSERVER,port) > > >> You can't have a single SMTP connection that's used in multiple threads. > >> That is what causes the error. Each thread should have its own SMTP > >> connection. So move this code (above and below) into the run() method. > > >> >g> print 'connected' > >> >g> #s.set_debuglevel(1) > >> >g> except: > >> >g> print 'ERROR: Unable to connect to mail server', sys.exc_info > >> >()[0] > >> >g> sys.exit(1) > >> >g> #login to server > >> >g> if password <> '': > >> >g> print 'Logging into mail server' > > >> I think this try except block should be inside the if statement, i.e. > >> indented 4 spaces. > > >> >g> try: > >> >g> s.login(username,password) > >> >g> except: > >> >g> print 'ERROR: Unable to login to mail server', MAILSERVER > >> >g> print 'Please recheck your password' > >> >g> sys.exit(1) > >> >g> #-------------------------------------------------- > >> >g> print "Starting Multi Thread Method" > >> >g> class MyThread(Thread): > >> >g> def __init__(self, site, s, FROM, MSGBODY): > >> >g> Thread.__init__(self) > >> >g> self.site = site > >> >g> self.s=s > >> >g> self.FROM=FROM > >> >g> self.MSGBODY=MSGBODY > > >> You give the s (connection) here as a parameter, store it in self.s and > >> never use that attribute. > > >> >g> def run(self): > >> >g> print "running for %s " %self.site > >> >g> s.sendmail(self.FROM, self.site, self.MSGBODY) > > >> Here you use the global s, not self.s > > >> As I said above you should do the SMTP connection setup, including the > >> login, here, and store the connection either in self.s or in a local > >> variable s in the method. As you don't use the s in another method, I > >> think a local variable is better. > > >> >g> print "Emailed for site %s" %self.site > >> >g> a= time.time() > >> >g> threads = [] > >> >g> for site in listTo: > >> >g> T = MyThread(site,s,FROM,MSGBODY) > >> >g> threads.append(T) > >> >g> T.start() > >> >g> for i in threads: > >> >g> i.join() > > >> Of course the next 2 lines should also be moved to run(). > > >> >g> s.quit() > >> >g> s.close() > >> >g> print "Took %s seconds" %str(time.time()-a) > >> >g> #----------------------------------------------------- > > >> -- > >> Piet van Oostrum <p...@cs.uu.nl> > >> URL:http://pietvanoostrum.com[PGP8DAE142BE17999C4] > >> Private email: p...@vanoostrum.org > > >Thanks Everyone By your guidance the code worked fine > >I can send mails in multi threaded environment. > >Is this only way to send mails concurrently or any other method > >aviable? > > Here's another way: > > from twisted.mail.smtp import sendmail > from twisted.internet import reactor > from twisted.python.log import err > > MAILSERVER = ... > listTo = [...] > FROM = ... > MSGBODY = ... > > done = sendmail(MAILSERVER, FROM, listTo, MSGBODY) > done.addErrback(err) > done.addCallback(lambda ignored: reactor.stop()) > reactor.run() > > Jean-Paul
Hi Jean-Paul This is what I'm searching for ,Thanks a lot Based on your posting I wrote a programme,but it showed me a error like "Failure: twisted.mail.smtp.SMTPDeliveryError: 554 No recipients accepted" and "Relay access denied" errors I can clearly figure out, that this error is because, i haven't authenticated my email account to send mail. I have username and password of smpt server ,how to authenticate in Twisted Framework -- http://mail.python.org/mailman/listinfo/python-list