From 72c29aef1e7ac67149e49d362093fea956edd6bf Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Sat, 23 Feb 2013 22:53:51 +0100 Subject: fix umlauts in receiver --- invoice/mailhelper.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/invoice/mailhelper.py b/invoice/mailhelper.py index 0da8cd8..ae9d3ac 100644 --- a/invoice/mailhelper.py +++ b/invoice/mailhelper.py @@ -7,6 +7,8 @@ from email.header import Header import time, email.utils, smtplib +import sys + class MAIL(object): def __init__(self, server, port, username, password): self.__server = server @@ -15,6 +17,29 @@ class MAIL(object): self.__password = password pass + def __format_addresses(self, addresses, header_name=None, charset=None): + header=email.header.Header(charset=charset, header_name=header_name) + for i, (name, addr) in enumerate(addresses): + if i!=0: + # add separator between addresses + header.append(',', charset='us-ascii') + # check if address name is a unicode or byte string in "pure" us-ascii + try: + # check id byte string contains only us-ascii chars + name.encode('us-ascii') + except UnicodeError: + # Header will use "RFC2047" to encode the address name + # if name is byte string, charset will be used to decode it first + header.append(name, charset='utf-8') + # here us-ascii must be used and not default 'charset' + header.append('<%s>' % (addr,), charset='us-ascii') + else: + # name is a us-ascii byte string, i can use formataddr + formated_addr=email.utils.formataddr((name, addr)) + # us-ascii must be used and not default 'charset' + header.append(formated_addr, charset='us-ascii') + return header + def generate_mail(self, receiver, subject, message, attachments = None, timestamp=time.time(), cc = None): msg = MIMEMultipart() msg["From"] = "KtT-Shopsystem " @@ -24,7 +49,7 @@ class MAIL(object): if receiver[0].encode("ascii"): msg["To"] = receiver[0] + " <" + receiver[1] + ">" except UnicodeError: - msg["To"] = Header(receiver[0], 'utf-8') + " <" + receiver[1] + ">" + msg["To"] = self.__format_addresses([receiver]) if cc != None: msg["Cc"] = cc -- cgit v1.2.3