paul@136 | 1 | #!/usr/bin/env python |
paul@136 | 2 | |
paul@136 | 3 | from GPGUtils import GPG, as_string |
paul@136 | 4 | from email import message_from_file |
paul@136 | 5 | from email.mime.message import MIMEMessage |
paul@136 | 6 | from subprocess import Popen, PIPE |
paul@136 | 7 | import sys |
paul@136 | 8 | |
paul@136 | 9 | # Postfix exit codes. |
paul@136 | 10 | |
paul@136 | 11 | EX_TEMPFAIL = 75 |
paul@136 | 12 | |
paul@136 | 13 | try: |
paul@136 | 14 | # Obtain an identity. |
paul@136 | 15 | |
paul@136 | 16 | gpg = GPG() |
paul@136 | 17 | identity = sys.argv[1] |
paul@136 | 18 | recipients = sys.argv[2:] |
paul@136 | 19 | original = message_from_file(sys.stdin) |
paul@136 | 20 | |
paul@136 | 21 | # Wrap the message in its own container. |
paul@136 | 22 | |
paul@136 | 23 | msg = MIMEMessage(original) |
paul@136 | 24 | |
paul@136 | 25 | # Sign the message. |
paul@136 | 26 | |
paul@136 | 27 | msg = gpg.signMessage(msg, identity) |
paul@136 | 28 | msg["From"] = identity |
paul@136 | 29 | msg["To"] = original["To"] |
paul@136 | 30 | msg["Subject"] = original["Subject"] |
paul@136 | 31 | |
paul@136 | 32 | # Submit to Postfix without causing routing loops. |
paul@136 | 33 | |
paul@136 | 34 | sendmail = Popen(["/usr/sbin/sendmail", "-G", "-i"] + recipients, shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE) |
paul@136 | 35 | sendmail.stdin.write(as_string(msg)) |
paul@136 | 36 | out, err = sendmail.communicate() |
paul@136 | 37 | retcode = sendmail.wait() |
paul@136 | 38 | |
paul@136 | 39 | sys.exit(retcode) |
paul@136 | 40 | |
paul@136 | 41 | except Exception, exc: |
paul@136 | 42 | if "-v" in sys.argv[1:]: |
paul@136 | 43 | raise |
paul@136 | 44 | type, value, tb = sys.exc_info() |
paul@136 | 45 | print >>sys.stderr, "Exception %s at %d" % (exc, tb.tb_lineno) |
paul@136 | 46 | #import traceback |
paul@136 | 47 | #traceback.print_exc(file=open("/tmp/mail.log", "a")) |
paul@136 | 48 | sys.exit(EX_TEMPFAIL) |
paul@136 | 49 | |
paul@136 | 50 | sys.exit(0) |
paul@136 | 51 | |
paul@136 | 52 | # vim: tabstop=4 expandtab shiftwidth=4 |