#!/usr/bin/env python
import imaplib, os, sys, re, time, email, random, string
username=''
password=''
srv = imaplib.IMAP4_SSL('imap.gmail.com', 993)
srv.login(username, password)
status, count = srv.select('[Google Mail]/Drafts')
for mailNum in count:
if (mailNum == '0'):
print "No matching emails found"
break
typ, msgData = srv.fetch(mailNum, '(RFC822)')
for response_part in msgData:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
payload = msg.get_payload()
subject = msg['subject']
toLine = msg['to']
fromLine = msg['from']
regex = re.compile('.*\*\*SIGN\*\*')
m = regex.match(subject)
if not m:
print "Message \"%s\" does not match our search" % (subject)
continue
else:
print "Message \"%s\" matches our search" % (subject)
randStr = ''.join(random.choice(string.ascii_uppercase) for x in range(4))
plainFileName = '/tmp/imap-signer-'+randStr
msgFile = open(plainFileName,'w')
msgFile.write(payload)
msgFile.close()
os.system('gpg --clearsign ' + plainFileName)
os.remove(plainFileName)
gpgFH = open(plainFileName+'.asc', 'r')
newPayload = gpgFH.read()
os.remove(msgFile.name+'.asc')
newEmail = email.message.Message()
newEmail['Subject'] = subject[0:subject.find('**SIGN**')]+'**SIGNED**'
newEmail['From'] = fromLine
newEmail['To'] = toLine
newEmail.set_payload(newPayload+'\n')
srv.store(mailNum, '+FLAGS', r'(\Deleted)')
srv.append('[Google Mail]/Drafts', '',
imaplib.Time2Internaldate(time.time()), str(newEmail))
srv.close()
srv.logout()