[2/2] models: fix From header in mbox view

Message ID 1368182666-28892-2-git-send-email-andreas.devel@googlemail.com
State Accepted
Commit 2f0eb64a6d543b26aa0a38ff1d5a09389a5b2f5c
Headers show

Commit Message

Andreas Bießmann May 10, 2013, 10:44 a.m.
The From header in mbox view was corrupt for patch submitters with non-ASCII
characters in their names. RFC 2822 requires to retain the mail as ASCII in
braces '<' and '>' while the name should be coded. Before we coded the whole
string which led to some MUA misinterpret the From header (while git could
manage it).
Fix this by coding just the name and let the email untouched.

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>

This problem was mentioned in prior mails, for example http://thread.gmane.org/gmane.comp.version-control.patchwork/659

 apps/patchwork/models.py |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)


diff --git a/apps/patchwork/models.py b/apps/patchwork/models.py
index 9129aab..a9e70ce 100644
--- a/apps/patchwork/models.py
+++ b/apps/patchwork/models.py
@@ -32,12 +32,14 @@  try:
     from email.mime.nonmultipart import MIMENonMultipart
     from email.encoders import encode_7or8bit
     from email.parser import HeaderParser
+    from email.header import Header
     import email.utils
 except ImportError:
     # Python 2.4 compatibility
     from email.MIMENonMultipart import MIMENonMultipart
     from email.Encoders import encode_7or8bit
     from email.Parser import HeaderParser
+    from email.Header import Header
     import email.Utils
     email.utils = email.Utils
@@ -281,7 +283,9 @@  class Patch(models.Model):
         mail['Subject'] = self.name
         mail['Date'] = email.utils.formatdate(
-        mail['From'] = unicode(self.submitter)
+        mail['From'] = email.utils.formataddr((
+                        str(Header(self.submitter.name, mail.patch_charset)),
+                        self.submitter.email))
         mail['X-Patchwork-Id'] = str(self.id)
         mail['Message-Id'] = self.msgid
         mail.set_unixfrom('From patchwork ' + self.date.ctime())