Advertisement
Typhoon

Send Mass Email with Python 2

May 11th, 2015
810
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.60 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import time
  5. import smtplib
  6. from email.mime.multipart import MIMEMultipart
  7. from email.mime.text import MIMEText
  8. from email.header import Header
  9. from email.utils import formataddr
  10. import logging
  11.  
  12.  
  13. campaign = "mc1"
  14. subject = "Aké finty používajú obstarávatelia"
  15. mailgrp = "Domains"
  16. # Logging
  17. class ContextFilter(logging.Filter):
  18.     def filter(self, record):
  19.         record.count = counter
  20.         return True
  21.  
  22.  
  23. open('mailer_log.html', 'w').close()
  24. logger = logging.getLogger('mailer')
  25. hdlr = logging.FileHandler('mailer_log.html')
  26. logger.addFilter(ContextFilter())  # Add logger filter for showing counter
  27. formatter = logging.Formatter('%(count)s: %(asctime)s %(levelname)s %(message)s')
  28. hdlr.setFormatter(formatter)
  29. logger.addHandler(hdlr)
  30. logger.setLevel(logging.INFO)
  31.  
  32. # Import TEXT only File as Body
  33. t = open('textmsg.txt', 'r')
  34. tmsgfile = t.read()
  35. # Import HTML only File as Body
  36. h = open('htmlmsg.txt', 'r')
  37. hmsgfile = h.read()
  38. # Import E-Mail addresses from file. Separate mail@ddress per line
  39. addr_f = open('mails.txt', 'r')
  40. # This is as second log and it store only emails
  41. addr_s = open('sent.txt', 'a')
  42. addr_list = []
  43.  
  44. for line in addr_f:
  45.     addr_list.append(str((line).replace("\n", "")))
  46. # addr_list.sort() #Don't sort if you want to remove lines if unexpected error will occur
  47. print addr_list
  48. print "\nE-Mails count : ", len(addr_list)
  49.  
  50. # Pick Up email recipient from list and send email to address
  51. counter = 1
  52. logger.info("Number of emails : " + str(len(addr_list)))
  53. for mail in addr_list:
  54.     try:
  55.         # From which Email address
  56.         from_mail = formataddr((str(Header('www.mydomain.sk', 'utf-8')), 'info@mydomain.sk'))
  57.         to_mail = mail  # E-Mail address from list
  58.  
  59.         msg = MIMEMultipart('alternative')
  60.         msg['Content-Type'] = "text/html; charset=utf-8"
  61.         msg['Subject'] = Header(subject, 'utf-8')
  62.         msg['From'] = from_mail
  63.         msg['To'] = to_mail
  64.  
  65.         # Send plaintext version of this mail because of old email clients
  66.         text = tmsgfile
  67.         # Send HTML formatted email body with rewriting unsubscribe link for
  68.         html = hmsgfile.replace('useremail', mail).replace('mailcamp', campaign).replace('mailgroup',mailgrp)
  69.         part1 = MIMEText(text, 'plain', "utf-8")
  70.         part2 = MIMEText(html, 'html', "utf-8")
  71.  
  72.         msg.attach(part1)
  73.         msg.attach(part2)
  74.  
  75.         s = smtplib.SMTP('smtp.websupport.sk:25')  # SMTP server DNS (or IP) and Port
  76.         s.starttls()  # Use TLS
  77.         s.login('info@mydomain.sk', 'my_pass')  # Username and Password
  78.         s.sendmail(from_mail, to_mail, msg.as_string())
  79.         logger.info("Sent to : " + mail)  # Log info message about success email sent
  80.         addr_s.write(mail + "\n") # Write email to another file for analysis
  81.  
  82.         # Print which is processed
  83.         print "\n", counter, "Message sent to :", mail
  84.         time.sleep(1)  # Sleep some second between mails to send
  85.         counter += 1
  86.     except:
  87.         print "\n", counter, "Error in sending email to recipient %s." % mail  # Print Error message but process next mail
  88.         logger.warning("SMTP Error : " + mail)  # Log info message about error in sending
  89.         addr_s.write(mail + "\n") # Write email to another file for analysis
  90.         counter += 1
  91.  
  92. s.quit()
  93. logger.info("Sending Finished")
  94. print "\nFinish"
  95.  
  96.  
  97.  
  98. #########################
  99. ## Example htmlmsg.txt ##
  100. #########################
  101.  
  102. <!DOCTYPE html>
  103. <html lang="sk_SK">
  104. <meta charset="utf-8">
  105. <html>
  106. <head>
  107. </head>
  108. <body>
  109. <p>Pre klienta som robil analýzu podkladov k verejnému obstarávaniu. A čo som zistil?
  110.  
  111. <p style="padding-left: 30px;">•  Že požadovali kapacitu vyššiu o 350 % ako bolo potrebné (tu argument o rezerve neobstojí).</p>
  112. <p style="padding-left: 30px;">•  Že si žiadali odborné referencie s hodnotou o 200 % vyššou ako je hodnota zákazky (pozor v tomto bode spojili dve veci – odbornosť a výšku tržieb, aby videli že uchádzač je finančne silný).</p>
  113. <p style="padding-left: 30px;">•  Že zúčastniť sa mohol len úzko špecializovaný subjekt, ktorý musel vykonávať aj dopravu (pritom v danom odbore existuje niekoľko firiem, ktoré sa špecializujú len na prepravu obdobných produktov. Tak prečo by mali byť vylúčené?).</p>
  114. <p style="padding-left: 30px;">•  Že v podkladoch bolo zopár chybičiek, ktoré šikovnému človeku umožnia plniť kritériá bez toho aby ich vlastne splnil alebo by mohol zrušiť celú súťaž, ak by sa to nevyvíjalo želaným smerom.</p>
  115. <p style="padding-left: 30px;">•  Že podmienky účasti boli vo finančnej a odbornej spôsobilosti zdvojené zábezpekou aj certifikátmi.</p><br/>
  116.  
  117. <p>Takéto podmienky sú neprimerané a aj diskriminačné. Voči takýmto podmienkam je však možné brániť sa. Vy sa už nedajte nachytať! Nemusíte prijať takéto podmienky ale môžete žiadať ich zmenu!</p><br/>
  118.  
  119. <p>Viem, že mnohí ste sa s tým už stretli. Ja len chcem povedať, že ak sa trochu pripravíte budete sa na to dívať ako na akýkoľvek iný obchodný prípad, kde vám chce druhá strana podstrčiť svoje podmienky, tak tie nezrovnalosti uvidíte tiež a hneď sa môžete pýtať a žiadať nápravu. Ktovie, možno to bude Váš prvý veľký „kšeft“.</p><br/>
  120.  
  121. <p>Volám sa Martin Kolesár a verejné obstarávanie riešim <a href="http://voprakticky.sk/mailcamp">jednoducho a prakticky</a>. V tomto duchu som pripravil aj príručku, ktorá Vám ozrejmí celé verejné obstarávanie tak ako v skutočnosti prebieha krok za krokom a keď tomu budete rozumieť, už nebudete mať pocit bezmocnosti ale budete vidieť svoje príležitosti.</p>
  122. <p></p><br/>
  123. <p>Príručku Verejné obstarávanie jednoducho a prakticky si môžete objednať na stránke <a href="http://voprakticky.sk/mailcamp">voprakticky.sk</a> kde nájdete aj ďalšie informácie o verejnom obstarávaní.</p>
  124. <p></p><br/>
  125. <p>Robme veci jednoduchšie,</p>
  126. <p> </p><br/>
  127. <p>Ing. Martin Kolesár</p>
  128. <p></p><br/>
  129. <p>tel.: <a style="color: #1155cc;" href="tel:0918%20370%20498" target="_blank">0918 370 498</a></p>
  130. <p>e-mail: <a style="color: #1155cc;" href="mailto:info@voprakticky.sk" target="_blank">info@voprakticky.sk</a></p>
  131. <p>web: <a style="color: #1155cc;" href="http://www.voprakticky.sk/mailcamp" target="_blank">www.voprakticky.sk</a></p>
  132. <br/>
  133. <center><p>Želáte si aj nadalej dostávať e-maily od nás? <strong><a style="color: #1155cc;" href="http://voprakticky.sk/email/registracia.php?email=useremail&amp;kampan=mailcamp&amp;grp=mailgroup" target="_blank">Ano</a> / </strong><a style="color: #1155cc;" href="http://voprakticky.sk/email/index.php?email=useremail&amp;kampan=mailcamp&amp;grp=mailgroup" target="_blank">Nie</a></p>
  134. <p>V prípade, že nie budete vyradený z našej databázy.</p></center>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement