Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- # -*- encoding:utf-8 -*-
- import sys
- import os
- import os.path
- import smtplib
- from email.mime.base import MIMEBase
- from email.mime.multipart import MIMEMultipart
- from email.mime.text import MIMEText
- from email import Encoders
- from email.header import Header
- from email.utils import COMMASPACE, formatdate
- import logging
- DEFAULT_MIMETYPE = 'application/octet-stream'
- def strip_html(htmltext):
- from HTMLParser import HTMLParser
- class MLStripper(HTMLParser):
- def __init__(self):
- self.reset()
- self.fed = []
- def handle_data(self, d):
- self.fed.append(d)
- def get_data(self):
- return ''.join(self.fed)
- s = MLStripper()
- s.feed(htmltext)
- return s.get_data()
- class Attachment:
- def __init__(self, filename, data, mimetype=DEFAULT_MIMETYPE):
- self.filename = filename,
- self.data = data
- self.mimetype = mimetype
- def __repr__(self):
- return "<Attachment(filename='{0}',mimetype='{1}')>".format(self.filename, self.mimetype)
- @classmethod
- def fromFile(klass, filename):
- return Attachment(filename=os.path.basename(filename), data=open(filename, 'rb').read())
- @classmethod
- def fromStringIO(klass, filename, data, mimetype=DEFAULT_MIMETYPE):
- return Attachment(filename, data.read(), mimetype)
- def send_email(sender, recipient, title, text, html=False, ccs=[], attachments=[], smtpHost='localhost', smtpPort=25, username=None, password='', isTls=True):
- if type(recipient) == str:
- recipient = [recipient]
- msg = MIMEMultipart()
- msg['Subject'] = Header(title, 'utf-8')
- msg.preamble = title
- msg['From'] = sender
- msg['To'] = COMMASPACE.join(recipient)
- msg['Date'] = formatdate(localtime=True)
- if html:
- msg.attach(MIMEText(text, 'html'))
- msg.attach(MIMEText(strip_html(text), 'plain'))
- else:
- msg.attach(MIMEText(text))
- for attachment in attachments:
- ma, mb = attachment.mimetype.split('/')
- part = MIMEBase(ma, mb)
- part.set_payload(attachment.data)
- Encoders.encode_base64(part)
- part.add_header(
- 'Content-Disposition', 'attachement; filename="{0}"'.format(attachment.filename))
- msg.attach(part)
- server = smtplib.SMTP(smtpHost, smtpPort)
- server.set_debuglevel(1)
- if isTls:
- try:
- server.starttls()
- except Exception:
- logging.debug('starttls failed')
- if username:
- server.login(username, password)
- server.sendmail(sender, recipient, msg.as_string())
- server.quit()
- if __name__ == '__main__':
- logging.basicConfig(level=logging.DEBUG)
- parameters = {}
- for key, value in [map(str.strip, x.split('=')) for x in sys.argv[1:]]:
- if key and value:
- parameters[key] = value
- for k in ['sender', 'recipient', 'title']:
- if not k in parameters:
- logging.error("The '{0}' parameter is mandatory".format(k))
- sys.exit(-1)
- if 'file' in parameters:
- parameters['text'] = open(parameters['file'], 'rb').read()
- del parameters['file']
- else:
- parameters['text'] = sys.stdin.read()
- if 'attachments' in parameters:
- a = []
- for filename in map(str.strip,parameters['attachments'].split(',')):
- a.append(Attachment.fromFile(filename))
- parameters['attachments'] = a
- if 'html' in parameters:
- parameters['html'] = parameters['html'] in ('true', 'True')
- logging.debug(repr(parameters))
- send_email(**parameters)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement