Add get-emails and mail-merge scripts
authorAlex Dehnert <adehnert@mit.edu>
Wed, 21 Apr 2010 16:16:23 +0000 (12:16 -0400)
committerAlex Dehnert <adehnert@mit.edu>
Wed, 21 Apr 2010 16:18:26 +0000 (12:18 -0400)
* get-emails: search LDAP by last name, and write out all possible results
  with name and username to a CSV file for further fiddling
* mail-merge: given a CSV file and an email, merge the two

get-emails [new file with mode: 0755]
mail-merge [new file with mode: 0755]

diff --git a/get-emails b/get-emails
new file mode 100755 (executable)
index 0000000..2e1bb80
--- /dev/null
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+
+import sys
+import os
+import csv
+import ldap
+
+def dictize_line(header, line,):
+    line_dict = {}
+    for key, elem in zip(header, line, ):
+        line_dict[key]=elem
+    return line_dict
+
+def undictize_line(headers, dct, ):
+    line = []
+    for col in headers:
+        line.append(dct[col])
+    return line
+
+def get_ldap_data(lastname, fields):
+    con = ldap.open('ldap.mit.edu')
+    con.simple_bind_s("", "")
+    dn = "dc=mit,dc=edu"
+    result = con.search_s('dc=mit,dc=edu', ldap.SCOPE_SUBTREE, '(&(sn=%s)(uid=*))'%lastname, fields)
+    if len(result) > 1: sys.stderr.write("WARNING: More than one result returned for %s\n" % lastname)
+    if len(result) < 1: sys.stderr.write("WARNING: No results returned for %s\n" % lastname)
+    ret = []
+    for person in result:
+        retelem = {}
+        for key in person[1]:
+            retelem[key] = person[1][key][0]
+        ret.append(retelem)
+    return ret
+
+if __name__ == '__main__':
+    indb = sys.stdin
+    outdb = sys.stdout
+    reader = csv.reader(indb, )
+    writer = csv.writer(outdb, )
+    header = reader.next()
+    for line in reader:
+        line_dict = dictize_line(header, line)
+        try:
+            new_lines = get_ldap_data(line_dict['Last'], ['cn', 'sn', 'givenName', 'uid', ])
+        except ldap.SIZELIMIT_EXCEEDED, e:
+            pass
+        for new_line in new_lines:
+            writer.writerow(line + undictize_line(['uid', 'cn', ], new_line))
diff --git a/mail-merge b/mail-merge
new file mode 100755 (executable)
index 0000000..6fc8068
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+
+import sys
+import os
+import csv
+import smtplib
+
+def dictize_line(header, line,):
+    line_dict = {}
+    for key, elem in zip(header, line, ):
+        line_dict[key]=elem
+    return line_dict
+
+if __name__=='__main__':
+    smtp = smtplib.SMTP()
+    smtp.connect()
+    email_file = sys.argv[1]
+    email = open(email_file, 'r').read()
+    reader = csv.reader(open(sys.argv[2]))
+    header = reader.next()
+    print header
+    for line in reader:
+        dct = dictize_line(header, line, )
+        print dct
+        text = email % dct
+        smtp.sendmail('adehnert@mit.edu', [dct['username']+'@mit.edu', 'book-exchange@mit.edu', ], text, )