* tools/hook-scripts/mailer/mailer.py (MailedOutput.mail_headers): Modularize the code which encodes header value tokens, and use it for encoding both the Subject: and From: lines as necessary. Index: tools/hook-scripts/mailer/mailer.py =================================================================== --- tools/hook-scripts/mailer/mailer.py (revision 1407458) +++ tools/hook-scripts/mailer/mailer.py (working copy) @@ -228,12 +228,18 @@ self.reply_to = self.reply_to[3:] def mail_headers(self, group, params): - subject = self.make_subject(group, params) - try: - subject.encode('ascii') - except UnicodeError: - from email.Header import Header - subject = Header(subject, 'utf-8').encode() + + def _maybe_encode_header(hdr): + try: + hdr.encode('ascii') + return hdr + except UnicodeError: + from email.Header import Header + return Header(hdr, 'utf-8').encode() + + subject = ' '.join(map(_maybe_encode_header, + self.make_subject(group, params).split())) + from_hdr = ' '.join(map(_maybe_encode_header, self.from_addr.split())) hdrs = 'From: %s\n' \ 'To: %s\n' \ 'Subject: %s\n' \ @@ -244,7 +250,7 @@ 'X-Svn-Commit-Author: %s\n' \ 'X-Svn-Commit-Revision: %d\n' \ 'X-Svn-Commit-Repository: %s\n' \ - % (self.from_addr, ', '.join(self.to_addrs), subject, + % (from_hdr, ', '.join(self.to_addrs), subject, group, self.repos.author or 'no_author', self.repos.rev, os.path.basename(self.repos.repos_dir)) if self.reply_to: