Properly format email headers with non-ascii
authorMagnus Hagander <magnus@hagander.net>
Fri, 8 Dec 2017 14:31:20 +0000 (15:31 +0100)
committerMagnus Hagander <magnus@hagander.net>
Fri, 8 Dec 2017 14:31:20 +0000 (15:31 +0100)
When sending an email to non-ascii names, the actual email address
should not be part of the encoded section. It should have a separate
section that's not encoded.

Ported over from the pgeu install

hamnadmin/hamnadmin/mailqueue/util.py

index 2f616b6605426d065310f373d3fea1fccd4346be..b6933e4df98fe80c8f21006503493fa2f84f5144 100644 (file)
@@ -1,11 +1,16 @@
 from email.mime.text import MIMEText
 from email.mime.multipart import MIMEMultipart
 from email.mime.nonmultipart import MIMENonMultipart
-from email.Utils import formatdate
+from email.Utils import formatdate, formataddr
 from email import encoders
 
 from models import QueuedMail
 
+def _encoded_email_header(name, email):
+       if name:
+               return formataddr((str(Header(name, 'utf-8')), email))
+       return email
+
 def send_simple_mail(sender, receiver, subject, msgtxt, attachments=None, bcc=None, sendername=None, receivername=None):
        # attachment format, each is a tuple of (name, mimetype,contents)
        # content should be *binary* and not base64 encoded, since we need to
@@ -13,14 +18,8 @@ def send_simple_mail(sender, receiver, subject, msgtxt, attachments=None, bcc=No
        # formatted output message
        msg = MIMEMultipart()
        msg['Subject'] = subject
-       if receivername:
-               msg['To'] = u'{0} <{1}>'.format(receivername, receiver)
-       else:
-               msg['To'] = receiver
-       if sendername:
-               msg['From'] = u'{0} <{1}>'.format(sendername, sender)
-       else:
-               msg['From'] = sender
+       msg['To'] = _encoded_email_header(receivername, receiver)
+       msg['From'] = _encoded_email_header(sendername, sender)
        msg['Date'] = formatdate(localtime=True)
 
        msg.attach(MIMEText(msgtxt, _charset='utf-8'))