New submission from yegle: Currently the `msg` argument of `smtplib.SMTP.sendmail` accept a `str` in Py3k if every characters in this `str` is in ASCII range, or a `bytes`.
This is confusing for new comer because: 1. When you send your mail using only ASCII characters, everything is fine (no matter you use bytes or str). 2. When sometimes you included non-ASCII characters in your email, the traceback is hard to understand. Here's an example of such traceback: Traceback (most recent call last): File "./manage.py", line 113, in <module> manager.run() File "/data/web/cgi-bin/venv/lib/python3.3/site-packages/flask_script/__init__.py", line 405, in run result = self.handle(sys.argv[0], sys.argv[1:]) File "/data/web/cgi-bin/venv/lib/python3.3/site-packages/flask_script/__init__.py", line 384, in handle return handle(app, *positional_args, **kwargs) File "/data/web/cgi-bin/venv/lib/python3.3/site-packages/flask_script/commands.py", line 145, in handle return self.run(*args, **kwargs) File "./manage.py", line 108, in run conn.send(msg) File "/data/web/cgi-bin/venv/lib/python3.3/site-packages/flask_mail.py", line 168, in send message.as_string()) File "/data/web/cgi-bin/python-3.3.3/lib/python3.3/smtplib.py", line 747, in sendmail msg = _fix_eols(msg).encode('ascii') UnicodeEncodeError: 'ascii' codec can't encode character '\u9f99' in position 646: ordinal not in range(128) Here's my proposal: --- smtplib.py.orig 2014-02-01 21:26:47.000000000 -0500 +++ smtplib.py 2014-02-01 21:37:51.000000000 -0500 @@ -744,7 +744,12 @@ esmtp_opts = [] print(msg) if isinstance(msg, str): - msg = _fix_eols(msg).encode('ascii') + try: + msg = _fix_eols(msg).encode('ascii') + except UnicodeEncodeError: + raise SMTPException( + "msg may be a string containing characters in the " + "ASCII range, or a byte string.") if self.does_esmtp: # Hmmm? what's this? -ddm # self.esmtp_features['7bit']="" ---------- components: email messages: 209943 nosy: barry, r.david.murray, yegle priority: normal severity: normal status: open title: smtplib.SMTP.sendmail: improve exception message type: enhancement versions: Python 3.3 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue20482> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com