def test_real_mail_aiosmtpd(self): """ Test sending messages with a real-world SMTPD server """ if aiosmtpd is None: self.skipTest('aiosmtpd not available') # Start an smtp server mail_handler = StashingHandler() controller = Controller(mail_handler, loop=None, hostname='localhost', port=self.smtpd_port) controller.start() # Give it time to settle sleep(0.5) # Initialize a Postman postman = Postman('*****@*****.**', NoLoginSMTP('localhost', self.smtpd_port, None, None)) # Send messages with postman.connect() as c: # Send plaintext message msg = Message(['*****@*****.**'], 'Subject', 'HTML message') c.sendmail(msg) # Send unicode message msg = Message(['*****@*****.**'], u'Håkon', u'Håkon') c.sendmail(msg) # Done controller.stop() # Test self.assertEqual(len(mail_handler.mail), 2)
def __init__(self, config, januapath): self.config = config self.postman = None self.januapath = januapath if self.config.enable: connection = ESMTPConnection(config.smtp_host, config.smtp_port, config.smtp_username, config.smtp_password, local_hostname=None, ssl=config.smtp_ssl, tls=config.smtp_tls, timeout=config.smtp_timeout) self.postman = Postman(config.mail_from, connection)
def test_smtp(self): # Fake msg = Message(['*****@*****.**'], 'Test') postman = Postman('*****@*****.**', SMTPConnection( 'smtp.gmail.com', 587, '*****@*****.**', 'wrong', tls=True)) # try to connect: an error should occur try: with postman.connect() as c: raise AssertionError('Exception not raised') except smtplib.SMTPAuthenticationError as e: self.assertEqual(e.smtp_code, 535) self.assertIn('Username and Password not accepted', e.smtp_error)
def test_real_mail_smtpd(self): """ Test sending messages with a real SMTPD server """ # port+1 because python can't let it go.. :) hack? smtp_server = TestingSMTPServer(port=self.smtpd_port+1) smtp_server.start() sleep(0.5) # Initialize a Postman postman = Postman('*****@*****.**', NoLoginSMTP('localhost', self.smtpd_port+1, None, None)) # Send messages with postman.connect() as c: # Send unicode message c.sendmail(Message(['*****@*****.**'], u'Håkon', u'Håkon')) # Test self.assertIsNotNone(smtp_server.received_data) # Clean-up smtp_server.close() smtp_server.join()
def test_smtp(self): # Set socket timeout (because in some cases the test hangs for 120 seconds) socket.setdefaulttimeout(2.0) self.addCleanup(socket.setdefaulttimeout, None) # Fake msg = Message(['*****@*****.**'], 'Test') postman = Postman( '*****@*****.**', SMTPConnection('smtp.gmail.com', 587, '*****@*****.**', 'wrong', tls=True)) # try to connect: an error should occur try: with postman.connect() as c: raise AssertionError('Exception not raised') except smtplib.SMTPAuthenticationError as e: self.assertEqual(e.smtp_code, 535) self.assertIn(b'Username and Password not accepted', e.smtp_error)
def test_real_mail_smtpd(self): """ Test sending messages with a real SMTPD server """ # port+1 because python can't let it go.. :) hack? smtp_server = TestingSMTPServer(port=self.smtpd_port + 1) smtp_server.start() sleep(0.5) # Initialize a Postman postman = Postman( '*****@*****.**', NoLoginSMTP('localhost', self.smtpd_port + 1, None, None)) # Send messages with postman.connect() as c: # Send unicode message c.sendmail(Message(['*****@*****.**'], u'Håkon', u'Håkon')) # Test self.assertIsNotNone(smtp_server.received_data) # Clean-up smtp_server.close() smtp_server.join()
def test_real_mail_aiosmtpd(self): """ Test sending messages with a real-world SMTPD server """ if aiosmtpd is None: self.skipTest('aiosmtpd not available') # Start an smtp server mail_handler = StashingHandler() controller = Controller(mail_handler, loop=None, hostname='localhost', port=self.smtpd_port) controller.start() # Give it time to settle sleep(0.5) # Initialize a Postman postman = Postman( '*****@*****.**', NoLoginSMTP('localhost', self.smtpd_port, None, None)) # Send messages with postman.connect() as c: # Send plaintext message msg = Message(['*****@*****.**'], 'Subject', 'HTML message') c.sendmail(msg) # Send unicode message msg = Message(['*****@*****.**'], u'Håkon', u'Håkon') c.sendmail(msg) # Done controller.stop() # Test self.assertEqual(len(mail_handler.mail), 2)
def test_smtp(self): # Fake msg = Message(['*****@*****.**'], 'Test') postman = Postman('*****@*****.**', None) # It's never used anyway # Cannot use `None` as Connection self.assertRaises(AttributeError, postman.connect().__enter__) # Mock and test with postman.loopback() as lo: # Send with postman.connect() as c: c.sendmail(msg) # Check self.assertEqual(len(lo), 1) self.assertEqual(len(lo), 1) # Still usable # Now fails again self.assertRaises(AttributeError, postman.connect().__enter__)
def main(): cls () datiserver, cartellelavoro = configurazionesmtp () listamail= letturamaillist (cartellelavoro['mailist']) print "inserimento dati preparatori" t= int(raw_input ("inserisci l'intervallo dell'attesa tra l'invio di una mail e l'altra, in minuti(es. 3 o 4 o 5 minuti):" )) ora=0 minuti=t* len (listamail) #calcolo tempo necessario per l'invio della mail. if (len(listamail)*t)>=60 : ora= int((len(listamail)*t)/60) minuti= len(listamail)*t%60 print "tempo necessario per completare l'invio di ", len(listamail),"mail:" ,ora,"ora/e:",minuti," minuto/i circa." spegnimento_macchina=raw_input("vuoi che spegnere il pc finito l'invio?(S/N or s/n):") #caricamento dati gia' inseriti cls() print 'inserimento o caricamento dati messaggio' scelta_messaggio= raw_input ("ci sono dei dati gia' predisposti li vuoi caricare e usare quei dati? (S/N o s/n):") if scelta_messaggio == "s" or scelta_messaggio =="S": stream =open ('c:\\newsletter\\messaggio_html\\datimessaggio.yaml','r') descrizione_foto= yaml.load (stream) stream.close() elif scelta_messaggio == "n" or scelta_messaggio== "N" : #caricamentopaginahtml da inviare nel messaggio di posta. messaggiohtml= caricamentopagina (cartellelavoro['messaggio']) descrizione_foto= dict () #inserimento oggetto messaggio #scelta foto foto= elencofile (cartellelavoro['messaggio']) solo_foto= [n for n in foto if string.find(n,'jpg')!=-1 ] descrizione_foto['oggetto']= raw_input ("inserisci l'oggetto della email/newsletter:") for i, listafoto in enumerate (solo_foto,start=1): print i, listafoto, '\n' descrizione_foto['foto']= solo_foto[int(raw_input ("inserisci il numero della foto corrispondente:"))-1] descrizione_foto['titolo']= raw_input ("inserisci il titolo della descrizione dell'immobile (es.:'singola, appartamento, villetta ecc.): ") descrizione_foto['zona'] = raw_input ("inserisci dove si trova l'immobile (es. lido Nazioni, Lido Pomposa, Comacchio ecc.):") descrizione_foto['descrizione_breve'] = raw_input("inserisci una descrizione breve dell'immobile:") descrizione_foto['descrizione']= raw_input ("inserisci una descrizione piu' completa dell'immobile:") descrizione_foto['link']= raw_input ('inserisci il link per il bottone dettaglio:') descrizione_foto['paginahtml'] = messaggiohtml descrizione_foto['percentuale']= '%' dati_messaggio= open (cartellelavoro['messaggio']+'\\'+'datimessaggio.yaml','w') yaml.dump (descrizione_foto,dati_messaggio) dati_messaggio.close() messaggiodefinitivo = descrizione_foto ['paginahtml'] % descrizione_foto cls() #['foto'], descrizione_foto['titolo'],descrizione_foto['zona'],descrizione_foto['descrizione_breve'],descrizione_foto['descrizione'] #preparazionesmtp server smtp_host=datiserver['nomeserver'] smtp_port=datiserver['porta'] smtp_mode=datiserver['metodosicurezza'] smtp_login=datiserver['login'] smtp_password=datiserver ['password'] mittente = datiserver ['mailaddress'] #caricamento elenco dei nomi dei file immagini per la pagina html. foto= elencofile (cartellelavoro['messaggio']) solo_foto= [n for n in foto if string.find(n,'gif')!=-1 ] solo_foto.extend ([n for n in foto if string.find(n,'jpg')!=-1]) solo_foto.extend([n for n in foto if string.find(n,'png')!=-1]) integrazione=[] for nomefile in solo_foto: #ImageAttachment(nomefile, open(cartellelavoro['messaggio']+'\\'+nomefile,'rb').read(), 'inline') integrazione.append(ImageAttachment(nomefile, open(cartellelavoro['messaggio']+'\\'+nomefile,'rb').read(), 'inline')) # Initialize a postman with SMTP connection to GMail postman = Postman(mittente, SMTPConnection(smtp_host, smtp_port,smtp_login,smtp_password,tls=True)) cls() print 'invio mail alla mail list.' print "tempo necessario per completare l'invio di ", len(listamail),"mail:" ,ora,"ora/e:",minuti," minuto/i circa escluso il tempo per l'invio di ogni singola e-mail." if spegnimento_macchina == "S" or spegnimento_macchina == "s": print "la Macchina verra' spenta a fine lavoro" for destinatari in listamail: destinatario = destinatari [1] #Composizione messaggio print "invio a:", destinatario messaggio = Message([destinatario],descrizione_foto['oggetto'], messaggiodefinitivo,attachments = integrazione) # Send everything we have with postman.connect() as c: c.sendmail(messaggio) print "inviato con Successo" tempoattesa(t) #preparazione mail messaggio e scelta delle immagini. if spegnimento_macchina == "S" or spegnimento_macchina == "s": os.system ("c:\\windows\\system32\\shutdown.exe /s") exit
class JanuaMailer(): def __init__(self, config, januapath): self.config = config self.postman = None self.januapath = januapath if self.config.enable: connection = ESMTPConnection(config.smtp_host, config.smtp_port, config.smtp_username, config.smtp_password, local_hostname=None, ssl=config.smtp_ssl, tls=config.smtp_tls, timeout=config.smtp_timeout) self.postman = Postman(config.mail_from, connection) def get_template(self, name): path = os.path.join(self.januapath, 'mail_template', self.config.mail_language.upper(), name) if not os.path.exists(path): raise MailError('Template %s not found' % name) template = Template.from_directory(path, subject_name='subject.txt', text_name='body.txt', html_name='body.html') template.set_renderer(UnicodePythonTemplateRenderer) return template def sendmail(self, mailobj): if not isinstance(mailobj, MailObj): raise MailError('argument must be MailObj') if not self.config.enable: raise MailError('Mail option has been disabled, dropping mail ...') subject = mailobj.subject message = mailobj.message if isinstance(mailobj.to, list): to = mailobj.to else: to = [mailobj.to] template = mailobj.template template_args = mailobj.template_args reply_to = mailobj.reply_to bcc = mailobj.bcc if self.postman: if template: tmpl = self.get_template(template) msg = tmpl(to, template_args, reply_to=reply_to, bcc=bcc) else: msg = Message(to, subject, text=message, reply_to=reply_to, bcc=bcc) if msg: try: with self.postman.connect() as c: c.sendmail(msg) except Exception, err: raise MailError(err) return True return False