Ticket #68: from_umlauts.patch

File from_umlauts.patch, 2.9 kB (added by fs, 8 months ago)

proposed fix

  • tests/test_message.py

    diff -r 0eba44381d0d tests/test_message.py
    a b  
    5858        subject_string = "Subject: " + str(Header(subject_string, "UTF-8")) 
    5959        self.failUnless(subject_string in msg_string) 
    6060     
    61      
     61    def test_from_with_umlaut(self): 
     62        from_name = u"Karl MÃŒller" 
     63        from_email = u"karl.mueller@mueller.com" 
     64         
     65        self.message.author = [(from_name, from_email)] 
     66        self.message.encoding = "ISO-8859-1" 
     67         
     68        msg_string = str(self.message) 
     69        encoded_name = str(Header(from_name, "ISO-8859-1")) 
     70        from_string = "From: %s <%s>" % (encoded_name, from_email) 
     71        self.failUnless(from_string in msg_string) 
  • turbomail/message.py

    diff -r 0eba44381d0d turbomail/message.py
    a b  
    218218                header = list(header) 
    219219                if isinstance(header[1], unicode): 
    220220                    header[1] = Header(header[1], self.encoding) 
     221                elif isinstance(header[1], AddressList): 
     222                    header[1] = header[1].encode(self.encoding) 
    221223                header[1] = str(header[1]) 
    222224                message.add_header(*header) 
    223225            elif isinstance(header, dict): 
  • turbomail/util.py

    diff -r 0eba44381d0d turbomail/util.py
    a b  
    5454        return "Address(\"%s\")" % str(self) 
    5555     
    5656    def __str__(self): 
     57        return self.encode() 
     58     
     59    def encode(self, encoding="US-ASCII"): 
    5760        assert self.address, "You must specify an address." 
    58          
    59         return formataddr((self.name, self.address)).replace("\n", "") 
    60      
     61        name_string = self.name 
     62        if isinstance(name_string, unicode): 
     63            name_string = str(Header(name_string, encoding)) 
     64        return formataddr((name_string, self.address)).replace("\n", "") 
    6165 
    6266 
    6367class AddressList(list): 
    64     def __init__(self, addresses=[]): 
     68    def __init__(self, addresses=[], encoding=None): 
    6569        super(AddressList, self).__init__() 
    6670         
     71        self.encoding = encoding 
    6772        if isinstance(addresses, (basestring, tuple)): 
    6873            addresses = [addresses] 
    6974         
     
    7580        return "AddressList(\"" + "\", \"".join([str(i) for i in self]) + "\")" 
    7681     
    7782    def __str__(self): 
    78         return ",\n ".join([str(i) for i in self]) 
     83        return self.encode(self.encoding) 
     84     
     85    def encode(self, encoding="ascii"): 
     86        addresses = [] 
     87        for address in self: 
     88            addresses.append(address.encode(encoding)) 
     89        return ",\n ".join(addresses) 
    7990     
    8091    def __setitem__(self, k, value): 
    8192        if not isinstance(value, Address):