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