Mercurial > hg > config
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() |