mail-merge: support sending mail with sendmail
authorAlex Dehnert <adehnert@mit.edu>
Thu, 21 Jun 2012 08:55:02 +0000 (04:55 -0400)
committerAlex Dehnert <adehnert@mit.edu>
Thu, 21 Jun 2012 08:55:02 +0000 (04:55 -0400)
This adds a /usr/lib/sendmail backend, to allow running mail-merge
on machines that do not run an SMTP server.

mail-merge

index 8ff245976ffcac1b382ee54c3f09506c455e96cc..f03baeac63b36e70c367cf653287ff7c0bd8460d 100755 (executable)
@@ -4,8 +4,10 @@ import sys
 import os
 import csv
 import smtplib
+import subprocess
 
 sender_header = 'mail-merge-sender@mit.edu'
+smtp = None
 
 def dictize_line(header, line,):
     line_dict = {}
@@ -13,10 +15,28 @@ def dictize_line(header, line,):
         line_dict[key]=elem
     return line_dict
 
-if __name__=='__main__':
-    print "Syntax: $script $cc_addr $template $recipients"
+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
+
+if __name__=='__main__':
+    print "Syntax: $script $cc_addr $template $recipients"
+    setup_sendmail()
     cc_addr = sys.argv[1]
     email_file = sys.argv[2]
     email = open(email_file, 'r').read()
@@ -27,4 +47,4 @@ if __name__=='__main__':
         dct = dictize_line(header, line, )
         print dct
         text = email % dct
-        smtp.sendmail(sender_header, [dct['email'], cc_addr, ], text, )
+        sendmail([dct['email'], cc_addr, ], text, )