Django

Code

Ticket #11212 (new)

Opened 10 months ago

Last modified 3 weeks ago

Don't encode emails with base64/qp

Reported by: phr Assigned to: nobody
Milestone: Component: django.core.mail
Version: SVN Keywords: send_mail
Cc: petr.hroudny@gmail.com Triage Stage: Accepted
Has patch: 1 Needs documentation: 0
Needs tests: 0 Patch needs improvement: 0

Description

#3472 introduced a patch, which replaces base64 encoding with quoted-printable.

Anyway, there's even better way to do get rid of unnecessary encoding:

from email import Charset 
Charset.add_charset('utf-8',Charset.SHORTEST,None,'utf-8')

The above will set Content-Transfer-Encoding to 7bit or 8bit as needed - exactly as Mutt or Thunderbird do and completely solve the problem even for non-latin characters.

Attachments

0001-Ticket-11212-default-to-7bit-email.patch (6.6 kB) - added by gisle on 02/23/10 10:46:41.
Patch with adjusted tests

Change History

05/27/09 01:57:33 changed by phr

  • cc changed from phr to petr.hroudny@gmail.com.
  • needs_better_patch changed.
  • needs_tests changed.
  • needs_docs changed.

05/27/09 02:20:15 changed by russellm

  • needs_tests set to 1.

Tests aren't optional. If you're changing code, you need tests - or a good excuse why a test isn't possible.

06/08/09 10:33:11 changed by phr

I'm not quite sure what to test here. Only a single parameter needs to be changed in file django/core/mail.py at line 23:

-Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8')
+Charset.add_charset('utf-8', Charset.SHORTEST, None, 'utf-8')

09/11/09 06:12:10 changed by lukeplant

You need to update and add to the tests in tests/regressiontests/mail/tests.py, which fail with the above change. You should add tests that show what happens with 7bit and 8bit data.

09/11/09 10:56:19 changed by phr

Yes, sure those tests fail. They test for:

Content-Transfer-Encoding: quoted-printable

at multiple places, which after the proposed change will not pass. If the input is pure ascii, that header will become:

Content-Transfer-Encoding: 7bit

If the input contains some accentuated character - e.g. 'áéí', there will be 8bit instead.

02/02/10 06:09:05 changed by russellm

  • stage changed from Unreviewed to Accepted.
  • milestone set to 1.2.

02/23/10 10:12:11 changed by gisle

  • owner changed from nobody to gisle.

02/23/10 10:46:41 changed by gisle

  • attachment 0001-Ticket-11212-default-to-7bit-email.patch added.

Patch with adjusted tests

02/23/10 10:50:25 changed by gisle

  • owner changed from gisle to nobody.
  • needs_better_patch set to 1.
  • needs_tests deleted.

I've included a patch that makes the tests pass, but as demonstrated by the patch this make us start generating email with "Content-Transfer-Encoding: 8bit" when passing in Unicode strings as subject or content. I think that should be avoided, so I don't recommend this patch as is.

02/23/10 18:18:05 changed by ubernostrum

  • milestone deleted.

1.2 is feature-frozen, moving this feature request off the milestone.

02/24/10 02:21:10 changed by phr

Replying to gisle:

I've included a patch that makes the tests pass, but as demonstrated by the patch this make us start generating email with "Content-Transfer-Encoding: 8bit" when passing in Unicode strings as subject or content. I think that should be avoided, so I don't recommend this patch as is.


The use of 8bit encoding is exactly the aim of this ticket, so the patch does the right thing IMHO.

Except for a few legacy paths, SMTP is mostly 8bit today - and where not, it's the MTA's role to downconvert to 7bit.

Many email clients are generating 8bit-encoded messages (Thunderbird, Mutt, etc) and people routinely use 8bit email every day. Avoiding it makes no longer any sense, and the current practice of using quoted-printable does not work right for non-latin aplhabets.

Please note that other software already implemented my proposal - see e.g. http://trac.edgewall.org/ticket/8252

02/24/10 02:21:42 changed by phr

  • needs_better_patch deleted.

Add/Change #11212 (Don't encode emails with base64/qp)




Change Properties
Action