From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from <gentoo-commits+bounces-317638-garchives=archives.gentoo.org@lists.gentoo.org>) id 1PqLmH-0004II-4b for garchives@archives.gentoo.org; Fri, 18 Feb 2011 08:33:25 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 80E23E0630; Fri, 18 Feb 2011 08:33:15 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 40965E0630 for <gentoo-commits@lists.gentoo.org>; Fri, 18 Feb 2011 08:33:15 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id A6C341B4038 for <gentoo-commits@lists.gentoo.org>; Fri, 18 Feb 2011 08:33:14 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id EC7B58006A for <gentoo-commits@lists.gentoo.org>; Fri, 18 Feb 2011 08:33:13 +0000 (UTC) From: "Zac Medico" <zmedico@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" <zmedico@gentoo.org> Message-ID: <e7ca7fc07c00584259b6a303c1cdca87e91dc70e.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/mail.py X-VCS-Directories: pym/portage/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: e7ca7fc07c00584259b6a303c1cdca87e91dc70e Date: Fri, 18 Feb 2011 08:33:13 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 2abab87c285e6f8af5b5e653ce1c10bc commit: e7ca7fc07c00584259b6a303c1cdca87e91dc70e Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Fri Feb 18 08:32:27 2011 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Fri Feb 18 08:32:27 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3De7ca7fc0 mail: handle unicode in subject more for python3 --- pym/portage/mail.py | 48 ++++++++++++++++++++++++++-------------------= --- 1 files changed, 26 insertions(+), 22 deletions(-) diff --git a/pym/portage/mail.py b/pym/portage/mail.py index 598c1f9..7268398 100644 --- a/pym/portage/mail.py +++ b/pym/portage/mail.py @@ -24,6 +24,20 @@ import portage if sys.hexversion >=3D 0x3000000: basestring =3D str =20 + def _force_ascii_if_necessary(s): + # Force ascii encoding in order to avoid UnicodeEncodeError + # from smtplib.sendmail with python3 (bug #291331). + s =3D _unicode_encode(s, + encoding=3D'ascii', errors=3D'backslashreplace') + s =3D _unicode_decode(s, + encoding=3D'ascii', errors=3D'replace') + return s + +else: + + def _force_ascii_if_necessary(s): + return s + def TextMessage(_text): from email.mime.text import MIMEText mimetext =3D MIMEText(_text) @@ -68,18 +82,16 @@ def create_message(sender, recipient, subject, body, = attachments=3DNone): mymessage["To"] =3D recipient mymessage["From"] =3D sender =20 - if sys.hexversion >=3D 0x3000000: - # Avoid UnicodeEncodeError in python3 with non-ascii characters. - # File "/usr/lib/python3.1/email/header.py", line 189, in __init__ - # self.append(s, charset, errors) - # File "/usr/lib/python3.1/email/header.py", line 262, in append - # input_bytes =3D s.encode(input_charset, errors) - #UnicodeEncodeError: 'ascii' codec can't encode characters in position= 0-9: ordinal not in range(128) - mymessage["Subject"] =3D subject - else: - # Use Header as a workaround so that long subject lines are wrapped - # correctly by <=3Dpython-2.6 (gentoo bug #263370, python issue #1974)= . - mymessage["Subject"] =3D Header(subject) + # Use Header as a workaround so that long subject lines are wrapped + # correctly by <=3Dpython-2.6 (gentoo bug #263370, python issue #1974). + # Also, need to force ascii for python3, in order to avoid + # UnicodeEncodeError with non-ascii characters: + # File "/usr/lib/python3.1/email/header.py", line 189, in __init__ + # self.append(s, charset, errors) + # File "/usr/lib/python3.1/email/header.py", line 262, in append + # input_bytes =3D s.encode(input_charset, errors) + #UnicodeEncodeError: 'ascii' codec can't encode characters in position = 0-9: ordinal not in range(128) + mymessage["Subject"] =3D Header(_force_ascii_if_necessary(subject)) mymessage["Date"] =3D time.strftime("%a, %d %b %Y %H:%M:%S %z") =09 return mymessage @@ -138,7 +150,7 @@ def send_mail(mysettings, message): # user wants to use a sendmail binary instead of smtp if mymailhost[0] =3D=3D os.sep and os.path.exists(mymailhost): fd =3D os.popen(mymailhost+" -f "+myfrom+" "+myrecipient, "w") - fd.write(message.as_string()) + fd.write(_force_ascii_if_necessary(message.as_string())) if fd.close() !=3D None: sys.stderr.write(_("!!! %s returned with a non-zero exit code. This g= enerally indicates an error.\n") % mymailhost) else: @@ -155,15 +167,7 @@ def send_mail(mysettings, message): if mymailuser !=3D "" and mymailpasswd !=3D "": myconn.login(mymailuser, mymailpasswd) =20 - message_str =3D message.as_string() - if sys.hexversion >=3D 0x3000000: - # Force ascii encoding in order to avoid UnicodeEncodeError - # from smtplib.sendmail with python3 (bug #291331). - message_str =3D _unicode_encode(message_str, - encoding=3D'ascii', errors=3D'backslashreplace') - message_str =3D _unicode_decode(message_str, - encoding=3D'ascii', errors=3D'replace') - + message_str =3D _force_ascii_if_necessary(message.as_string()) myconn.sendmail(myfrom, myrecipient, message_str) myconn.quit() except smtplib.SMTPException as e: