[Mailman-Users] sync_members

Mark Sapiro mark at msapiro.net
Tue Apr 21 19:03:51 CEST 2015


On 04/21/2015 06:59 AM, Marco Stoecker wrote:
> 
> indeed it throws an exception:
> 
> user at machine:~# ./mailinglist_sync.sh
> Traceback (most recent call last):
>   File "/usr/sbin/sync_members", line 288, in <module>
>     main()
>   File "/usr/sbin/sync_members", line 259, in main
>     s = email.Utils.formataddr((name, addr)).encode(enc, 'replace')
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 8:
> ordinal not in range(128)


This looks like <https://bugs.launchpad.net/mailman/+bug/1243343> which
was initially addressed in Mailman 2.1.17 and further fixed in 2.1.18.
Your's appears to be a pre 2.1.17 version. A patch is attached.

-- 
Mark Sapiro <mark at msapiro.net>        The highway is for gamblers,
San Francisco Bay Area, California    better use your sense - B. Dylan
-------------- next part --------------
=== modified file 'bin/sync_members'
--- bin/sync_members	2008-02-29 17:47:36 +0000
+++ bin/sync_members	2013-12-01 21:06:45 +0000
@@ -1,6 +1,6 @@
 #! @PYTHON@
 #
-# Copyright (C) 1998-2003 by the Free Software Foundation, Inc.
+# Copyright (C) 1998-2013 by the Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -256,6 +256,10 @@
             try:
                 if not dryrun:
                     mlist.ApprovedAddMember(userdesc, welcome, notifyadmin)
+                # Avoid UnicodeError if name can't be decoded
+                if isinstance(name, str):
+                    name = unicode(name, errors='replace')
+                name = name.encode(enc, 'replace')
                 s = email.Utils.formataddr((name, addr)).encode(enc, 'replace')
                 print _('Added  : %(s)s')
             except Errors.MMAlreadyAMember:
@@ -276,6 +280,10 @@
                     # reasons is in the database.  Use a lower level remove to
                     # get rid of this member's entry
                     mlist.removeMember(addr)
+            # Avoid UnicodeError if name can't be decoded
+            if isinstance(name, str):
+                name = unicode(name, errors='replace')
+            name = name.encode(enc, 'replace')
             s = email.Utils.formataddr((name, addr)).encode(enc, 'replace')
             print _('Removed: %(s)s')
 



More information about the Mailman-Users mailing list