Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. #!/usr/bin/env python2
  2. # -*- encoding:utf-8 -*-
  3.  
  4. import sys
  5. import os
  6. import os.path
  7. import smtplib
  8. from email.mime.base import MIMEBase
  9. from email.mime.multipart import MIMEMultipart
  10. from email.mime.text import MIMEText
  11. from email import Encoders
  12. from email.header import Header
  13. from email.utils import COMMASPACE, formatdate
  14. import logging
  15.  
  16. DEFAULT_MIMETYPE = 'application/octet-stream'
  17.  
  18.  
  19. def strip_html(htmltext):
  20. from HTMLParser import HTMLParser
  21.  
  22. class MLStripper(HTMLParser):
  23.  
  24. def __init__(self):
  25. self.reset()
  26. self.fed = []
  27.  
  28. def handle_data(self, d):
  29. self.fed.append(d)
  30.  
  31. def get_data(self):
  32. return ''.join(self.fed)
  33. s = MLStripper()
  34. s.feed(htmltext)
  35. return s.get_data()
  36.  
  37.  
  38. class Attachment:
  39.  
  40. def __init__(self, filename, data, mimetype=DEFAULT_MIMETYPE):
  41. self.filename = filename,
  42. self.data = data
  43. self.mimetype = mimetype
  44.  
  45. def __repr__(self):
  46. return "<Attachment(filename='{0}',mimetype='{1}')>".format(self.filename, self.mimetype)
  47.  
  48. @classmethod
  49. def fromFile(klass, filename):
  50. return Attachment(filename=os.path.basename(filename), data=open(filename, 'rb').read())
  51.  
  52. @classmethod
  53. def fromStringIO(klass, filename, data, mimetype=DEFAULT_MIMETYPE):
  54. return Attachment(filename, data.read(), mimetype)
  55.  
  56.  
  57. def send_email(sender, recipient, title, text, html=False, ccs=[], attachments=[], smtpHost='localhost', smtpPort=25, username=None, password='', isTls=True):
  58. if type(recipient) == str:
  59. recipient = [recipient]
  60. msg = MIMEMultipart()
  61. msg['Subject'] = Header(title, 'utf-8')
  62. msg.preamble = title
  63. msg['From'] = sender
  64. msg['To'] = COMMASPACE.join(recipient)
  65. msg['Date'] = formatdate(localtime=True)
  66.  
  67. if html:
  68. msg.attach(MIMEText(text, 'html'))
  69. msg.attach(MIMEText(strip_html(text), 'plain'))
  70. else:
  71. msg.attach(MIMEText(text))
  72.  
  73. for attachment in attachments:
  74. ma, mb = attachment.mimetype.split('/')
  75. part = MIMEBase(ma, mb)
  76. part.set_payload(attachment.data)
  77. Encoders.encode_base64(part)
  78. part.add_header(
  79. 'Content-Disposition', 'attachement; filename="{0}"'.format(attachment.filename))
  80. msg.attach(part)
  81.  
  82. server = smtplib.SMTP(smtpHost, smtpPort)
  83. server.set_debuglevel(1)
  84. if isTls:
  85. try:
  86. server.starttls()
  87. except Exception:
  88. logging.debug('starttls failed')
  89. if username:
  90. server.login(username, password)
  91. server.sendmail(sender, recipient, msg.as_string())
  92. server.quit()
  93.  
  94. if __name__ == '__main__':
  95. logging.basicConfig(level=logging.DEBUG)
  96. parameters = {}
  97. for key, value in [map(str.strip, x.split('=')) for x in sys.argv[1:]]:
  98. if key and value:
  99. parameters[key] = value
  100. for k in ['sender', 'recipient', 'title']:
  101. if not k in parameters:
  102. logging.error("The '{0}' parameter is mandatory".format(k))
  103. sys.exit(-1)
  104. if 'file' in parameters:
  105. parameters['text'] = open(parameters['file'], 'rb').read()
  106. del parameters['file']
  107. else:
  108. parameters['text'] = sys.stdin.read()
  109. if 'attachments' in parameters:
  110. a = []
  111. for filename in map(str.strip,parameters['attachments'].split(',')):
  112. a.append(Attachment.fromFile(filename))
  113. parameters['attachments'] = a
  114. if 'html' in parameters:
  115. parameters['html'] = parameters['html'] in ('true', 'True')
  116. logging.debug(repr(parameters))
  117. send_email(**parameters)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement