send_pgp_mime.py attempts to avoid UTF-8 for MIMEText messages.
authorW. Trevor King <wking@drexel.edu>
Sat, 18 Jul 2009 13:04:25 +0000 (09:04 -0400)
committerW. Trevor King <wking@drexel.edu>
Sat, 18 Jul 2009 13:04:25 +0000 (09:04 -0400)
This keeps the transfer-encoding out of base64 if possible.

Also added a "help" example to interafaces/email/interactive/examples.

interfaces/email/interactive/examples/help [new file with mode: 0644]
interfaces/email/interactive/send_pgp_mime.py

diff --git a/interfaces/email/interactive/examples/help b/interfaces/email/interactive/examples/help
new file mode 100644 (file)
index 0000000..14e887c
--- /dev/null
@@ -0,0 +1,9 @@
+From jdoe@example.com Fri Apr 18 11:18:58 2008
+Message-ID: <abcd@example.com>
+Date: Fri, 18 Apr 2008 12:00:00 +0000
+From: John Doe <jdoe@example.com>
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Subject: [be-bug] help
+
+Dummy content
index f66c6263c85cc89a823134a2df1576d78d547215..38a2437b0c7d5eb421334f85aeef6acf2ebbe433 100644 (file)
@@ -80,7 +80,6 @@ have been warned.
 verboseInvoke = False
 PGP_SIGN_AS = None
 PASSPHRASE = None
-DEFAULT_BODY_ENCODING = "UTF-8"
 
 # The following commands are adapted from my .mutt/pgp configuration
 # 
@@ -346,11 +345,22 @@ class Mail (object):
         return target_emails(self.headermsg)
     def encodedMIMEText(self, body, encoding=None):
         if encoding == None:
-            encoding = DEFAULT_BODY_ENCODING
-        if type(body) == types.StringType:
-            encoding = "US-ASCII"
+            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)
-        return MIMEText(body.encode(encoding), 'plain', encoding)
+        if encoding == "US-ASCII":
+            return MIMEText(body)
+        else:
+            return MIMEText(body.encode(encoding), 'plain', encoding)            
     def clearBodyPart(self):
         body = self.encodedMIMEText(self.body)
         body.add_header('Content-Disposition', 'inline')