Thanks. Ticket created at https://code.djangoproject.com/ticket/22561, with hopefully enough references and elements to make an educated choice.
Regards, NotSqrt Le jeudi 1 mai 2014 02:12:56 UTC+2, Russell Keith-Magee a écrit : > > > On Wed, Apr 30, 2014 at 7:13 PM, <[email protected] <javascript:>> wrote: > >> Hi ! >> >> I am implementing DKIM validation for my emails. >> I noticed than some emails do not pass DKIM validation due to different >> body hashes. >> I followed the email flow, and found that postfix automatically truncates >> lines to 998 characters if they are too long (in accordance to >> https://tools.ietf.org/html/rfc2822#section-2.1.1). >> >> Such emails can be generated by Sentry, by my own apps, etc.. >> >> Now about Django: >> When using EmailMessage, the charset is utf-8, and >> the Content-Transfer-Encoding is either 7bit or 8bit (automatically changes >> between them when the body contains non-ASCII characters). >> cf the ticket where the developers decided to switch from base64 to this >> behaviour : https://code.djangoproject.com/ticket/3472 >> >> Quick validation with: >> >> >>> from django.core.mail import EmailMessage >>> >>> print EmailMessage('subject', 'body', >>> >>> '[email protected]<javascript:>', >>> ['[email protected] <javascript:>']).message().as_string() >>> MIME-Version: 1.0 >>> Content-Type: text/plain; charset="utf-8" >>> Content-Transfer-Encoding: 7bit >>> Subject: subject >>> From: [email protected] <javascript:> >>> To: [email protected] <javascript:> >>> Date: Wed, 30 Apr 2014 11:01:44 -0000 >>> Message-ID: <20140430110144.1564.85693@localhost> >>> body >> >> >> >> So at the moment, because Django says not to use base64 for utf-8 emails >> in its code, Django does no longer make sure that the lines are not too >> long, despite the RFC. >> >> I see 3 ways to make sure that the lines are not too long : >> >> - automatically split lines in a way that can be recognized by email >> readers (no idea how to do that properly..) (in Django/in the apps) >> - go back to base64 (but it seems to increase spam scores) >> - switch to quoted-printable (functioning code below, no idea of the >> potentially negative impact) >> >> from django.core.mail.message import utf8_charsetfrom email import Charset >> utf8_charset.body_encoding = Charset.QP >> >> What do you think ? >> Is Django code / app code the correct place to fix this ? >> > > I'd say so. EmailMessage et al are the end user's public interface to > sending mail. If a user can use our API to generate a non-RFC compliant > mail, then that's a bug. Even if the root cause of the bug lies in a deeper > layer (e.g., Python's email library), we should do everything we can to > provide a workaround so that end users aren't affected. > > Should Django respect the RFC ? >> > > Absolutely. Django shouldn't expose a public API that makes it possible to > generate non-RFC emails payloads; furthermore, if there's any defacto > standards or common practices that make an email unacceptable on receipt > (e.g., the problem with base64 encoding getting flagged as spam), we should > be adhering to that, too. > > >> Any other ideas ? >> >> > It sounds like you've found a problem; this should be logged as a ticket > so it isn't forgotten. If you want to try your hand at a patch, the help > would be most welcome. > > I'd need to do some more reading about the right solution; Quoted > Printable might be workable, but I'm also not aware if that will have any > downstream consequences. Some investigation will be required. The only > option I can rule out is moving back to base64, because that was done for a > reason. Unless you can validate that base64 encoding is no longer penalized > by popular spam services, this isn't an option. > > Yours, > Russ Magee %-) > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/c6ef5f21-5566-4434-b71f-71e27f5f6491%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

