Thank you Mark.  I was able to fix the problem with this bit of Claude code for 
"mailman-web shell":

from allauth.account.models import EmailAddress
from django.db.models.functions import Lower

# Get all email addresses
all_emails = EmailAddress.objects.all()

# Group by user_id and lowercase email
seen = {}
to_delete = []

for email_obj in all_emails:
    key = (email_obj.user_id, email_obj.email.lower())
    
    if key in seen:
        # We have a duplicate - decide which to keep
        existing = seen[key]
        
        # Keep verified over unverified
        if email_obj.verified and not existing.verified:
            to_delete.append(existing.id)
            seen[key] = email_obj
        # Keep primary over non-primary
        elif email_obj.primary and not existing.primary:
            to_delete.append(existing.id)
            seen[key] = email_obj
        # Keep lowercase version
        elif email_obj.email == email_obj.email.lower():
            to_delete.append(existing.id)
            seen[key] = email_obj
        else:
            to_delete.append(email_obj.id)
    else:
        seen[key] = email_obj

print(f"Will delete {len(to_delete)} duplicate entries")

# Delete duplicates
if to_delete:
    EmailAddress.objects.filter(id__in=to_delete).delete()
    print("Duplicates removed!")
_______________________________________________
Mailman-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at: 
https://lists.mailman3.org/archives/list/[email protected]/message/YQLC34YJTTXSA7I3LQ6RM7ZBOEVOUNWV/

This message sent to [email protected]

Reply via email to