Changeset 101

Show
Ignore:
Timestamp:
10/04/08 08:29:34 (3 months ago)
Author:
fs
Message:

adds support for non ascii characters in recipient names (#68)

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/tests/test_message.py

    r100 r101  
    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@example.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) 
  • trunk/turbomail/message.py

    r100 r101  
    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) 
  • trunk/turbomail/util.py

    r92 r101  
    5555     
    5656    def __str__(self): 
     57        return self.encode() 
     58     
     59    def encode(self, encoding="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] 
     
    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):