from email.MIMENonMultipart import MIMENonMultipart
from email.Encoders import encode_7or8bit
from email.Generator import Generator
- from email.parser import Parser
+ from email.Parser import Parser
from email.Utils import getaddresses
getaddress = getaddresses
p = Parser()
return p.parsestr(text, headersonly=True)
+def guess_encoding(text):
+ if type(text) == types.StringType:
+ encoding = "us-ascii"
+ elif type(text) == types.UnicodeType:
+ for encoding in ["us-ascii", "iso-8859-1", "utf-8"]:
+ try:
+ text.encode(encoding)
+ except UnicodeError:
+ pass
+ else:
+ break
+ assert encoding != None
+ return encoding
+
+def encodedMIMEText(body, encoding=None):
+ if encoding == None:
+ encoding = guess_encoding(body)
+ if encoding == "us-ascii":
+ return MIMEText(body)
+ else:
+ # Create the message ('plain' stands for Content-Type: text/plain)
+ return MIMEText(body.encode(encoding), 'plain', encoding)
+
+def append_text(text_part, new_text):
+ original_payload = text_part.get_payload(decode=True)
+ new_payload = u"%s%s" % (original_payload, new_text)
+ new_encoding = guess_encoding(new_payload)
+ text_part.set_payload(new_payload.encode(new_encoding), new_encoding)
+
def attach_root(header, root_part):
"""
Attach the email.Message root_part to the email.Message header
g.flatten(msg)
text = fp.getvalue()
if to_unicode == True:
- encoding = msg.get_content_charset()
+ encoding = msg.get_content_charset() or "utf-8"
text = unicode(text, encoding=encoding)
return text
True
>>> target_emails(header) == [to_addr]
True
- >>> m = EncryptedMessageFactory('check 1 2\\ncheck 1 2\\n')
+ >>> m = PGPMimeMessageFactory('check 1 2\\ncheck 1 2\\n')
>>> print flatten(m.clearBodyPart())
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
"""
def __init__(self, body):
self.body = body
- def encodedMIMEText(self, body, encoding=None):
- if encoding == None:
- if type(body) == types.StringType:
- encoding = "us-ascii"
- elif type(body) == types.UnicodeType:
- for encoding in ["us-ascii", "iso-8859-1", "utf-8"]:
- try:
- body.encode(encoding)
- except UnicodeError:
- pass
- else:
- break
- assert encoding != None
- # Create the message ('plain' stands for Content-Type: text/plain)
- if encoding == "us-ascii":
- return MIMEText(body)
- else:
- return MIMEText(body.encode(encoding), 'plain', encoding)
def clearBodyPart(self):
- body = self.encodedMIMEText(self.body)
+ body = encodedMIMEText(self.body)
body.add_header('Content-Disposition', 'inline')
return body
def passphrase_arg(self, passphrase=None):
"""
text/plain
"""
- return self.encodedMIMEText(self.body)
+ return encodedMIMEText(self.body)
def sign(self, header, passphrase=None):
"""
multipart/signed
if body == None:
raise Exception, "missing body"
- m = EncryptedMessageFactory(body)
+ m = PGPMimeMessageFactory(body)
if options.mode == "sign":
bodymsg = m.sign(header)
elif options.mode == "encrypt":