﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24623	AttributeError when trying to send an utf-8 encoded email with text attachments (mime type: text/*)	tkrapp	Konrad Świat	"I get ""AttributeError: 'bytes' object has no attribute 'encode'"" when trying to send a utf-8 encoded email with text attachments (see stack trace below).

As far as I can see this happens when using python 3 (like we do) and utf-8 as encoding.
* If you attach a text/csv file for example, django tries to instantiate a SafeMIMEText object with the following parameters: (text: bytes(...), subtype: 'csv', charset: 'utf-8') (django/core/mail/message.py:338)
* SafeMIMEText calls init of MIMEText and sets the charset to None explicitly when charset was 'utf-8' before but does not convert text from bytes to str which is expected by MIMEText (django/core/mail/message.py:175)
* MIMEText then tries to encode the provided _text parameter as 'us-ascii' and fails since a bytes object has no encode-method in python3 (email/mime/text.py:33)

'''Example'''
{{{
from django.core.mail import EmailMessage

email = EmailMessage('subject', 'body', 'from@example.com', ['to@example.com'])
email.attach_file('/path/to/csv.file')

email.send()
}}}

Solutions I could think of:
* Convert text parameter of SafeMIMEText from bytes to str before calling init of MIMEText. This would imply that one knows the encoding of the text file or the file encoding is detected automatically.
* Convert the file content and call attach of EmailMessage.

'''Stack trace''':
{{{
Traceback (most recent call last):
  File ""./manage.py"", line 10, in <module>
    execute_from_command_line(sys.argv)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py"", line 385, in execute_from_command_line
    utility.execute()
  File ""/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py"", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/management/base.py"", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/management/base.py"", line 338, in execute
    output = self.handle(*args, **options)
  File ""/mnt/storage/django/code/trouble_ticket/management/commands/send2ntt.py"", line 41, in handle
    raise(e)
  File ""/mnt/storage/django/code/trouble_ticket/management/commands/send2ntt.py"", line 39, in handle
    email.send()
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 286, in send
    return self.get_connection(fail_silently).send_messages([self])
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/backends/smtp.py"", line 99, in send_messages
    sent = self._send(message)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/backends/smtp.py"", line 113, in _send
    message = email_message.message()
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 253, in message
    msg = self._create_message(msg)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 312, in _create_message
    return self._create_attachments(msg)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 325, in _create_attachments
    msg.attach(self._create_attachment(*attachment))
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 367, in _create_attachment
    attachment = self._create_mime_attachment(content, mimetype)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 338, in _create_mime_attachment
    attachment = SafeMIMEText(content, subtype, encoding)
  File ""/usr/local/lib/python3.4/dist-packages/django/core/mail/message.py"", line 175, in __init__
    MIMEText.__init__(self, text, subtype, None)
  File ""/usr/lib/python3.4/email/mime/text.py"", line 33, in __init__
    _text.encode('us-ascii')
AttributeError: 'bytes' object has no attribute 'encode'
}}}

"	Bug	closed	Core (Mail)	1.7	Normal	fixed	email python3 SafeMIMEText MIMEText attach_file		Accepted	1	0	0	0	0	0
