mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.6.x] Worked around a bug in python 3.3.3. Refs #21093
Backport of 280c1a65cc from master.
			
			
This commit is contained in:
		| @@ -21,7 +21,9 @@ from django.utils import six | ||||
|  | ||||
| # Don't BASE64-encode UTF-8 messages so that we avoid unwanted attention from | ||||
| # some spam filters. | ||||
| Charset.add_charset('utf-8', Charset.SHORTEST, None, 'utf-8') | ||||
| utf8_charset = Charset.Charset('utf-8') | ||||
| utf8_charset.body_encoding = None  # Python defaults to BASE64 | ||||
|  | ||||
|  | ||||
| # Default MIME type to use on attachments (if it is not explicitly given | ||||
| # and cannot be guessed). | ||||
| @@ -150,7 +152,23 @@ class SafeMIMEText(MIMEMixin, MIMEText): | ||||
|  | ||||
|     def __init__(self, text, subtype, charset): | ||||
|         self.encoding = charset | ||||
|         MIMEText.__init__(self, text, subtype, charset) | ||||
|         if charset == 'utf-8': | ||||
|             # Unfortunately, Python doesn't support setting a Charset instance | ||||
|             # as MIMEText init parameter (http://bugs.python.org/issue16324). | ||||
|             # We do it manually and trigger re-encoding of the payload. | ||||
|             MIMEText.__init__(self, text, subtype, None) | ||||
|             del self['Content-Transfer-Encoding'] | ||||
|             # Work around a bug in python 3.3.3 [sic], see | ||||
|             # http://bugs.python.org/issue19063 for details. | ||||
|             if sys.version_info[:3] == (3, 3, 3): | ||||
|                 payload = text.encode(utf8_charset.output_charset) | ||||
|                 self._payload = payload.decode('ascii', 'surrogateescape') | ||||
|                 self.set_charset(utf8_charset) | ||||
|             else: | ||||
|                 self.set_payload(text, utf8_charset) | ||||
|             self.replace_header('Content-Type', 'text/%s; charset="%s"' % (subtype, charset)) | ||||
|         else: | ||||
|             MIMEText.__init__(self, text, subtype, charset) | ||||
|  | ||||
|     def __setitem__(self, name, val): | ||||
|         name, val = forbid_multi_line_headers(name, val, self.encoding) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user