#!/usr/bin/python import csv import os import smtplib import subprocess import sys sender_header = 'mail-merge-sender@mit.edu' smtp = None def dictize_line(header, line,): line_dict = {} for key, elem in zip(header, line, ): line_dict[key]=elem return line_dict def setup_sendmail_smtp(): global smtp smtp = smtplib.SMTP() smtp.connect() def sendmail_smtp(addrs, text): global smtp smtp.sendmail(sender_header, addrs, text, ) smtp_funcs = (setup_sendmail_smtp, sendmail_smtp, ) def sendmail_cmd(addrs, text): args = ["/usr/lib/sendmail", "--", ] args.extend(addrs) proc = subprocess.Popen(args, stdin=subprocess.PIPE) proc.communicate(text) cmd_funcs = (lambda: True, sendmail_cmd) setup_sendmail, sendmail = smtp_funcs setup_sendmail, sendmail = cmd_funcs def mail_merge(cc_addr, email_file, recipients_file): email = open(email_file, 'r').read() reader = csv.reader(open(recipients_file, 'r')) header = reader.next() print header for line in reader: dct = dictize_line(header, line, ) print dct text = email % dct sendmail([dct['email'], cc_addr, ], text, ) if __name__=='__main__': print "Syntax: $script $cc_addr $template $recipients" setup_sendmail() cc_addr = sys.argv[1] email_file = sys.argv[2] recipients_file = sys.argv[3] mail_merge(cc_addr, email_file, recipients_file, )