comparison python/example/sendmail.py @ 746:eec5b7abff2b

add example sendmail script
author Jeff Hammel <k0scist@gmail.com>
date Mon, 29 Jun 2015 18:01:14 -0700
parents
children
comparison
equal deleted inserted replaced
745:6194eec4e3b7 746:eec5b7abff2b
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 """
5
6 See:
7 - http://pymotw.com/2/smtplib/
8 - http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
9 - https://github.com/CognitiveNetworks/daily-reports/blob/master/send_added_tv_count.py
10 """
11
12 import argparse
13 import email.utils
14 import os
15 import smtplib
16 import sys
17 from email.mime.text import MIMEText
18
19 __all__ = ['main']
20
21 class MailSender(object):
22
23 def __init__(self, host, sender, password, port=587, type='plain'):
24 self.host = host
25 self.sender = sender
26 self.password = password
27 self.port = port
28 self.type = type
29
30 def __call__(self, message, *recipients, **headers):
31
32 assert recipients
33
34 # construct the message
35 msg = MIMEText(message, self.type)
36 headers.setdefault('From', self.sender)
37 headers.setdefault('To', ','.join(recipients))
38 for key, value in headers.items():
39 msg[key] = value
40
41 # connect to mail server
42 server = smtplib.SMTP(self.host, self.port)
43 try:
44 server.set_debuglevel(True)
45
46 # identify ourselves, prompting server for supported features
47 server.ehlo()
48
49 # If we can encrypt this session, do it
50 if server.has_extn('STARTTLS'):
51 server.starttls()
52 server.ehlo() # re-identify ourselves over TLS connection
53
54 # login
55 server.login(self.sender, self.password)
56
57 # send the email
58 server.sendmail(self.sender, recipients, msg.as_string())
59 finally:
60 server.quit()
61
62 def main(args=sys.argv[1:]):
63
64 # parse command line
65 parser = argparse.ArgumentParser(description=__doc__)
66 parser.add_argument('host')
67 parser.add_argument('sender')
68 parser.add_argument('password')
69 parser.add_argument('-r', '--recipients', dest='recipients',
70 nargs='+', required=True,
71 help="recipients")
72 parser.add_argument('-m', '--message', dest='message', required=True)
73 parser.add_argument('--port', dest='port', type=int, default=587,
74 help="port to connect to [DEFAULT: %(default)s]")
75 options = parser.parse_args(args)
76
77 message = options.message
78
79 # instantiate sender
80 sender = MailSender(options.host, options.sender, options.password, options.port)
81
82 # send email
83 sender(message, *options.recipients)
84
85
86 if __name__ == '__main__':
87 main()