From: Alex Dehnert Date: Wed, 21 Apr 2010 16:16:23 +0000 (-0400) Subject: Add get-emails and mail-merge scripts X-Git-Url: https://www.dehnerts.com/gitweb/?p=user%2Falex%2Fsoftware%2Fmy-snippets.git;a=commitdiff_plain;h=2536a49b4e7af4331b5424b92d7e54fc118a2474 Add get-emails and mail-merge scripts * 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 --- diff --git a/get-emails b/get-emails new file mode 100755 index 0000000..2e1bb80 --- /dev/null +++ b/get-emails @@ -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 index 0000000..6fc8068 --- /dev/null +++ b/mail-merge @@ -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, )