Added option to overwrite default PGP style (inline or PGP/MIME) for defined recipients (useful if you have some recipients which can't handle one style).
This commit is contained in:
parent
92d66a35a5
commit
c022a2fe9d
|
@ -71,3 +71,10 @@ password = password
|
|||
# sub 2048g/BBBBBBBBBBBBBBBB 2007-10-22
|
||||
# You want the AAAAAAAAAAAAAAAA not BBBBBBBBBBBBBBBB.
|
||||
#you@domain.tld = 12345678
|
||||
|
||||
[pgp_style]
|
||||
# Here a PGP style (inline or PGP/MIME) could be defined for recipients.
|
||||
# This overwrites the setting mime_conversion for the defined recipients.
|
||||
# Valid entries are inline and mime
|
||||
# If an entry is not valid, the setting mime_conversion is used as fallback.
|
||||
#you@domian.tld = mime
|
||||
|
|
|
@ -32,6 +32,7 @@ import syslog
|
|||
import traceback
|
||||
import email.utils
|
||||
import os
|
||||
import copy
|
||||
|
||||
# imports for S/MIME
|
||||
from M2Crypto import BIO, Rand, SMIME, X509
|
||||
|
@ -101,10 +102,21 @@ def encrypt_payload( payload, gpg_to_cmdline ):
|
|||
payload.replace_header( 'Content-Transfer-Encoding', "7bit" )
|
||||
return payload
|
||||
|
||||
def encrypt_all_payloads( message, gpg_to_cmdline ):
|
||||
def encrypt_all_payloads_inline( message, gpg_to_cmdline ):
|
||||
encrypted_payloads = list()
|
||||
if type( message.get_payload() ) == str:
|
||||
return encrypt_payload( message, gpg_to_cmdline ).get_payload()
|
||||
|
||||
for payload in message.get_payload():
|
||||
if( type( payload.get_payload() ) == list ):
|
||||
encrypted_payloads.extend( encrypt_all_payloads( payload, gpg_to_cmdline ) )
|
||||
else:
|
||||
encrypted_payloads.append( encrypt_payload( payload, gpg_to_cmdline ) )
|
||||
return encrypted_payloads
|
||||
|
||||
def encrypt_all_payloads_attachment_style( message, gpg_to_cmdline ):
|
||||
encrypted_payloads = list()
|
||||
if type( message.get_payload() ) == str:
|
||||
if cfg.has_key('default') and cfg['default'].has_key('mime_conversion') and cfg['default']['mime_conversion'] == 'yes':
|
||||
# Convert a plain text email into PGP/MIME attachment style. Modeled after enigmail.
|
||||
submsg1 = email.message.Message()
|
||||
submsg1.set_payload("Version: 1\n")
|
||||
|
@ -137,10 +149,6 @@ def encrypt_all_payloads( message, gpg_to_cmdline ):
|
|||
message['Content-Type'] = "multipart/encrypted; protocol=\"application/pgp-encrypted\";\nboundary=\"%s\"\n" % boundary
|
||||
|
||||
return [ submsg1, encrypt_payload(submsg2, gpg_to_cmdline) ]
|
||||
else:
|
||||
# Do a simple in-line PGP conversion of a plain text email.
|
||||
return encrypt_payload( message, gpg_to_cmdline ).get_payload()
|
||||
|
||||
|
||||
for payload in message.get_payload():
|
||||
if( type( payload.get_payload() ) == list ):
|
||||
|
@ -273,13 +281,44 @@ log("Encrypting email to: %s" % ' '.join( map(lambda x: x[0], gpg_to) ))
|
|||
if cfg['default'].has_key('add_header') and cfg['default']['add_header'] == 'yes':
|
||||
raw_message['X-GPG-Mailgate'] = 'Encrypted by GPG Mailgate'
|
||||
|
||||
gpg_to_cmdline = list()
|
||||
gpg_to_smtp = list()
|
||||
for rcpt in gpg_to:
|
||||
gpg_to_smtp.append(rcpt[0])
|
||||
gpg_to_cmdline.extend(rcpt[1].split(','))
|
||||
gpg_to_smtp_mime = list()
|
||||
gpg_to_cmdline_mime = list()
|
||||
|
||||
encrypted_payloads = encrypt_all_payloads( raw_message, gpg_to_cmdline )
|
||||
gpg_to_smtp_inline = list()
|
||||
gpg_to_cmdline_inline = list()
|
||||
for rcpt in gpg_to:
|
||||
if cfg.has_key('pgp_style') and cfg['pgp_style'].has_key(rcpt[0]):
|
||||
if cfg['pgp_style'][rcpt[0]] == 'mime':
|
||||
gpg_to_smtp_mime.append(rcpt[0])
|
||||
gpg_to_cmdline_mime.extend(rcpt[1].split(','))
|
||||
elif cfg['pgp_style'][rcpt[0]] == 'inline':
|
||||
gpg_to_smtp_inline.append(rcpt[0])
|
||||
gpg_to_cmdline_inline.extend(rcpt[1].split(','))
|
||||
else:
|
||||
log("Style %s for recipient %s is not known. Use default as fallback." % (cfg['pgp_style'][rcpt[0]], rcpt[0]))
|
||||
if cfg['default'].has_key('mime_conversion') and cfg['default']['mime_conversion'] == 'yes':
|
||||
gpg_to_smtp_mime.append(rcpt[0])
|
||||
gpg_to_cmdline_mime.extend(rcpt[1].split(','))
|
||||
else:
|
||||
gpg_to_smtp_inline.append(rcpt[0])
|
||||
gpg_to_cmdline_inline.extend(rcpt[1].split(','))
|
||||
elif cfg['default'].has_key('mime_conversion') and cfg['default']['mime_conversion'] == 'yes':
|
||||
gpg_to_smtp_mime.append(rcpt[0])
|
||||
gpg_to_cmdline_mime.extend(rcpt[1].split(','))
|
||||
else:
|
||||
gpg_to_smtp_inline.append(rcpt[0])
|
||||
gpg_to_cmdline_inline.extend(rcpt[1].split(','))
|
||||
|
||||
if gpg_to_smtp_mime != list():
|
||||
|
||||
raw_message_mime = copy.deepcopy(raw_message)
|
||||
encrypted_payloads = encrypt_all_payloads_attachment_style( raw_message_mime, gpg_to_cmdline_mime )
|
||||
raw_message_mime.set_payload( encrypted_payloads )
|
||||
|
||||
send_msg( raw_message_mime.as_string(), gpg_to_smtp_mime )
|
||||
if gpg_to_smtp_inline != list():
|
||||
|
||||
encrypted_payloads = encrypt_all_payloads_inline( raw_message, gpg_to_cmdline_inline )
|
||||
raw_message.set_payload( encrypted_payloads )
|
||||
|
||||
send_msg( raw_message.as_string(), gpg_to_smtp )
|
||||
send_msg( raw_message.as_string(), gpg_to_smtp_inline )
|
Loading…
Reference in New Issue