changeset 746:eec5b7abff2b

add example sendmail script
author Jeff Hammel <k0scist@gmail.com>
date Mon, 29 Jun 2015 18:01:14 -0700
parents 6194eec4e3b7
children a2d199008a83
files python/example/sendmail.py
diffstat 1 files changed, 87 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/example/sendmail.py	Mon Jun 29 18:01:14 2015 -0700
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+
+See:
+- http://pymotw.com/2/smtplib/
+- http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
+- https://github.com/CognitiveNetworks/daily-reports/blob/master/send_added_tv_count.py
+"""
+
+import argparse
+import email.utils
+import os
+import smtplib
+import sys
+from email.mime.text import MIMEText
+
+__all__ = ['main']
+
+class MailSender(object):
+
+    def __init__(self, host, sender, password, port=587, type='plain'):
+        self.host = host
+        self.sender = sender
+        self.password = password
+        self.port = port
+        self.type = type
+
+    def __call__(self, message, *recipients, **headers):
+
+        assert recipients
+
+        # construct the message
+        msg = MIMEText(message, self.type)
+        headers.setdefault('From', self.sender)
+        headers.setdefault('To', ','.join(recipients))
+        for key, value in headers.items():
+            msg[key] = value
+
+        # connect to mail server
+        server = smtplib.SMTP(self.host, self.port)
+        try:
+            server.set_debuglevel(True)
+
+            # identify ourselves, prompting server for supported features
+            server.ehlo()
+
+            # If we can encrypt this session, do it
+            if server.has_extn('STARTTLS'):
+                server.starttls()
+                server.ehlo() # re-identify ourselves over TLS connection
+
+            # login
+            server.login(self.sender, self.password)
+
+            # send the email
+            server.sendmail(self.sender, recipients, msg.as_string())
+        finally:
+            server.quit()
+
+def main(args=sys.argv[1:]):
+
+    # parse command line
+    parser = argparse.ArgumentParser(description=__doc__)
+    parser.add_argument('host')
+    parser.add_argument('sender')
+    parser.add_argument('password')
+    parser.add_argument('-r', '--recipients', dest='recipients',
+                        nargs='+', required=True,
+                        help="recipients")
+    parser.add_argument('-m', '--message', dest='message', required=True)
+    parser.add_argument('--port', dest='port', type=int, default=587,
+                        help="port to connect to [DEFAULT: %(default)s]")
+    options = parser.parse_args(args)
+
+    message = options.message
+
+    # instantiate sender
+    sender = MailSender(options.host, options.sender, options.password, options.port)
+
+    # send email
+    sender(message, *options.recipients)
+
+
+if __name__ == '__main__':
+    main()