Refactor mail-merge slightly
[user/alex/software/my-snippets.git] / mail-merge
1 #!/usr/bin/python
2
3 import csv
4 import os
5 import smtplib
6 import subprocess
7 import sys
8
9
10 sender_header = 'mail-merge-sender@mit.edu'
11 smtp = None
12
13 def dictize_line(header, line,):
14     line_dict = {}
15     for key, elem in zip(header, line, ):
16         line_dict[key]=elem
17     return line_dict
18
19 def setup_sendmail_smtp():
20     global smtp
21     smtp = smtplib.SMTP()
22     smtp.connect()
23 def sendmail_smtp(addrs, text):
24     global smtp
25     smtp.sendmail(sender_header, addrs, text, )
26 smtp_funcs = (setup_sendmail_smtp, sendmail_smtp, )
27
28 def sendmail_cmd(addrs, text):
29     args = ["/usr/lib/sendmail", "--", ]
30     args.extend(addrs)
31     proc = subprocess.Popen(args, stdin=subprocess.PIPE)
32     proc.communicate(text)
33 cmd_funcs = (lambda: True, sendmail_cmd)
34
35 setup_sendmail, sendmail = smtp_funcs
36 setup_sendmail, sendmail = cmd_funcs
37
38 def mail_merge(cc_addr, email_file, recipients_file):
39     email = open(email_file, 'r').read()
40     reader = csv.reader(open(recipients_file, 'r'))
41     header = reader.next()
42     print header
43     for line in reader:
44         dct = dictize_line(header, line, )
45         print dct
46         text = email % dct
47         sendmail([dct['email'], cc_addr, ], text, )
48
49 if __name__=='__main__':
50     print "Syntax: $script $cc_addr $template $recipients"
51     setup_sendmail()
52     cc_addr = sys.argv[1]
53     email_file = sys.argv[2]
54     recipients_file = sys.argv[3]
55     mail_merge(cc_addr, email_file, recipients_file, )