Added "to_unicode" to send_pgp_mime.flatten()
authorW. Trevor King <wking@drexel.edu>
Sat, 18 Jul 2009 13:21:03 +0000 (09:21 -0400)
committerW. Trevor King <wking@drexel.edu>
Sat, 18 Jul 2009 13:21:03 +0000 (09:21 -0400)
be-handle-mail wants unicode output, since all it's internal
processing is done with unicode.  However, the flatten calls in
send_pgp_mime work with the encoded binary string output, and
execute(sendmail, stdin=flatten(msg, to_unicode=True)) fails
with
  Exception: u
  while executing /usr/sbin/sendmail -t
  sendmail: fatal: wking(1001): No recipient addresses found in message header

interfaces/email/interactive/be-handle-mail
interfaces/email/interactive/send_pgp_mime.py

index 3129ef4765b9efa150f2c5dfdac2c25f4ee7cd4b..d8aafb27cc7a3eba834b7cea93e9282c1cf05fab 100755 (executable)
@@ -62,7 +62,7 @@ class InvalidEmail (ValueError):
     def stderr_msg(self):
         err_text = [u"Invalid email (particular type unknown):\n",
                     unicode(self), u"",
-                    send_pgp_mime.flatten(self.msg)]
+                    send_pgp_mime.flatten(self.msg, to_unicode=True)]
         return u"\n".join(err_text)
 
 class InvalidSubject (InvalidEmail):
@@ -205,7 +205,9 @@ def compose_response(ret, out_text, err_text, info):
     if LOGFILE != None:
         LOGFILE.write("responding to %s: %s\n"
                 % (info["author_addr"], info["command"]))
-        LOGFILE.write("\n%s\n\n" % send_pgp_mime.flatten(response_email.plain()))
+        LOGFILE.write("\n%s\n\n"
+                      % send_pgp_mime.flatten(response_email.plain(),
+                                              to_unicode=True))
     return response_email
 
 def open_logfile(logpath=None):
@@ -263,7 +265,7 @@ def main():
         sys.exit(1)
     response_email = compose_response(ret, out_text, err_text, info).plain()
     if options.output == True:
-        print send_pgp_mime.flatten(response_email)
+        print send_pgp_mime.flatten(response_email, to_unicode=True)
     else:
         send_pgp_mime.mail(response_email, send_pgp_mime.sendmail)
     close_logfile()
index 38a2437b0c7d5eb421334f85aeef6acf2ebbe433..e0451c9699955dd49daf16f1ab6d703e145975b2 100644 (file)
@@ -155,7 +155,7 @@ def replace(template, format_char, replacement_text):
     str = regexp.sub(replacement_text, str)
     return str
 
-def flatten(msg):
+def flatten(msg, to_unicode=False):
     """
     Produce flat text output from an email Message instance.
     """
@@ -164,8 +164,10 @@ def flatten(msg):
     g = Generator(fp, mangle_from_=False)
     g.flatten(msg)
     text = fp.getvalue()
-    encoding = msg.get_content_charset()
-    return unicode(text, encoding=encoding)
+    if to_unicode == True:
+        encoding = msg.get_content_charset()
+        text = unicode(text, encoding=encoding)
+    return text
 
 def source_email(msg, return_realname=False):
     """