summaryrefslogtreecommitdiff
path: root/postgresqleu/mailqueue/util.py
diff options
context:
space:
mode:
authorMagnus Hagander2017-05-30 11:34:33 +0000
committerMagnus Hagander2017-05-30 11:34:33 +0000
commitbd46099f8ce2c1ba102c63837f6d69c59b0b73b5 (patch)
tree446075e45883cc76d2a5bf4d6c0a02adf425bf8e /postgresqleu/mailqueue/util.py
parent34562af76df44903df33819dd40d13df47e61df2 (diff)
Properly format email headers with non-ascii
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.
Diffstat (limited to 'postgresqleu/mailqueue/util.py')
-rw-r--r--postgresqleu/mailqueue/util.py18
1 files changed, 9 insertions, 9 deletions
diff --git a/postgresqleu/mailqueue/util.py b/postgresqleu/mailqueue/util.py
index 19952ff9..fd3a77e8 100644
--- a/postgresqleu/mailqueue/util.py
+++ b/postgresqleu/mailqueue/util.py
@@ -1,7 +1,8 @@
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.header import Header
from email import encoders
from postgresqleu.util.context_processors import settings_context
@@ -21,6 +22,11 @@ def send_template_mail(sender, receiver, subject, templatename, templateattr={},
template_to_string(templatename, templateattr),
attachments, bcc, sendername, receivername)
+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
@@ -28,14 +34,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'))