How to delete non-users
Hi all,
This is a bit of an emergency:
I am getting a bunch of complaints from potential list members of my lists that they can't subscribe and they don't get messages. Apparently, the issue is that they are non-members. I have never created any non-members but looking at the docs it seems that if someone sends a message to the list, they automatically become non-members. For individuals I have been able to delete their non-membership and they then could subscribe properly.
I have looked at some of my most popular lists and they have hundreds of non-members! It will take me an awful amount of time to remove each one manually, and not doing it - handling each as they complain - is also a lot of waste of time and cause of frustration for all involved.
I have tried scripting it with delmember, but it does not take the '-r nonmember' option ('findmember' does!).
Can anyone help me find out how to a. delete all non-members of all my lists b. prevent MM3 from creating new non-members in the future (so I don't have to keep removing them)
Any help with this is appreciated.
Yours,
Allan
I'm still at Mailman Core Version GNU Mailman 3.3.3 (Tom Sawyer) Mailman Core API Version 3.1 Mailman Core Python Version 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0]
My system used to be kept up to date by EMWD, but since Brian died have not been able to get it updated, and I'm too scared (from my attempts at installing MM3) to attempt it myself. If the above can only be solved via an update, I'd appreciate a referral.
On 9/16/22 11:19, Allan Hansen wrote:
Hi all,
This is a bit of an emergency:
I am getting a bunch of complaints from potential list members of my lists that they can't subscribe and they don't get messages. Apparently, the issue is that they are non-members. I have never created any non-members but looking at the docs it seems that if someone sends a message to the list, they automatically become non-members. For individuals I have been able to delete their non-membership and they then could subscribe properly.
I don't understand. the fact that an address is a non-member of a list should not impact subscribing that address as a member.
I have looked at some of my most popular lists and they have hundreds of non-members! It will take me an awful amount of time to remove each one manually, and not doing it - handling each as they complain - is also a lot of waste of time and cause of frustration for all involved.
What is actually happening when the non-member attempts to subscribe as a member? What do they do and what it the result?
I have tried scripting it with delmember, but it does not take the '-r nonmember' option ('findmember' does!).
Can anyone help me find out how to a. delete all non-members of all my lists
If you have access to mailman shell
you could do:
$ mailman shell
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
>>> lm = getUtility(IListManager)
>>> for l in lm:
... for nm in l.nonmembers.members:
... nm.unsubscribe()
...
>>> commit()
b. prevent MM3 from creating new non-members in the future (so I don't have to keep removing them)
nonmembers are an integral part of Mailman 3's architecture. The basic idea is a nonmember has a moderation action and setting a nonmembers moderation replaces MM 2.1's adding that address to one of *_these_nonmembers (The legacy *_these_nonmembers attributes still exist, but only to support regexps).
It would require extensive modification to not create nonmembers. However, I still don't understand why the presence of a nonmember record is an issue.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
Hi Mark,
Thank you for looking into it.
We are very strict about memberships, which we are because of spam, bots and malicious contributors and because we don't want anyone to think that our lists are used for spam:
When a user applies, the server sends a message to the moderator.
The moderator communicates with the potential member and accepts or does not accept the application.
At this point, if the user has not been accepted, but tried to send a message to the list, a non-member membership is created. When he/she logs in to list his/her account, the list to which he/she holds non-memberships will be listed and the user will think that he/she has been properly subscribed (why else are the lists listed). Noone notices the column that shows the role as 'nonmember.' So he/she thinks that the subscription request has been accepted, but nothing is working. That's why the 'non-member' record is an issue. I also don't see why non-members are automatically added, filling up the database with junk (at least from our point of view, with all respect).
But our lists don't accept messages from non-members. Such messages are quietly discarded, as most are spam, as mentioned above. So now the user is neither getting emails from the lists nor is unable to send messages to the list. The next step for the user is to complain to me. ☹
I have looked for a template that could be used to warn someone when he/she is added as a non-member, but did not find one. It's also not clear that I'd want one, as most of these non-subscriptions are by spammers and I prefer not to reply to spammers. __
I tried your suggestion below, Mark. Here's my transcript:
Welcome to the GNU Mailman shell Use commit() to commit changes. Use abort() to discard changes since the last commit. Exit with ctrl+D does an implicit commit() but exit() does not.
lm = getUtility(IListManager) for l in lm: ... for nm in l.nonmembers.members: ... nm.unsubscribe() ...
I did this twice, once with commit() and once typing ctrl/d (ctrl/D) just gave me a beep. Calling commit() did not return to the ... as in your example, but showed the >>> prompt, so I tried ctrl/D (beep) and then ctrl/d (exit). I then went to the Postorius page for one of the lists and found that all the non-members were still present.
Yours,
Allan
On 9/16/22, 15:01 , "Mark Sapiro" <mark@msapiro.net> wrote:
On 9/16/22 11:19, Allan Hansen wrote:
> Hi all,
>
> This is a bit of an emergency:
>
> I am getting a bunch of complaints from potential list members of my lists that they can't subscribe and they don't get messages. Apparently, the issue is that they are non-members. I have never created any non-members but looking at the docs it seems that if someone sends a message to the list, they automatically become non-members.
> For individuals I have been able to delete their non-membership and they then could subscribe properly.
I don't understand. the fact that an address is a non-member of a list
should not impact subscribing that address as a member.
> I have looked at some of my most popular lists and they have hundreds of non-members! It will take me an awful amount of time to remove each one manually, and not doing it - handling each as they complain - is also a lot of waste of time and cause of frustration for all involved.
What is actually happening when the non-member attempts to subscribe as
a member? What do they do and what it the result?
> I have tried scripting it with delmember, but it does not take the '-r nonmember' option ('findmember' does!).
>
> Can anyone help me find out how to
> a. delete all non-members of all my lists
If you have access to `mailman shell` you could do:
```
$ mailman shell
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
>>> lm = getUtility(IListManager)
>>> for l in lm:
... for nm in l.nonmembers.members:
... nm.unsubscribe()
...
>>> commit()
```
> b. prevent MM3 from creating new non-members in the future (so I don't have to keep removing them)
nonmembers are an integral part of Mailman 3's architecture. The basic
idea is a nonmember has a moderation action and setting a nonmembers
moderation replaces MM 2.1's adding that address to one of
*_these_nonmembers (The legacy *_these_nonmembers attributes still
exist, but only to support regexps).
It would require extensive modification to not create nonmembers.
However, I still don't understand why the presence of a nonmember record
is an issue.
--
Mark Sapiro <mark@msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users@mailman3.org
To unsubscribe send an email to mailman-users-leave@mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
On 9/16/22 16:40, Allan Hansen wrote:
Hi Mark,
Thank you for looking into it.
We are very strict about memberships, which we are because of spam, bots and malicious contributors and because we don't want anyone to think that our lists are used for spam:
When a user applies, the server sends a message to the moderator. The moderator communicates with the potential member and accepts or does not accept the application.
So Subscription policy is Moderate or Confirm, then moderate.
At this point, if the user has not been accepted, but tried to send a message to the list, a non-member membership is created.
Yes. This is expected.
When he/she logs in to list his/her account, the list to which he/she holds non-memberships will be listed and the user will think that he/she has been properly subscribed (why else are the lists listed).
I'm guessing you are talking about the https://www.example.com/mailman3/accounts/subscriptions/ page. On that page, all membership roles (owner, moderator, member, nonmember) are listed.
Note that if the user goes instead to info page for the list, appropriate pronoun will be presented with a subscribe form.
Noone notices the column that shows the role as 'nonmember.' So he/she thinks that the subscription request has been accepted, but nothing is working. That's why the 'non-member' record is an issue. I also don't see why non-members are automatically added, filling up the database with junk (at least from our point of view, with all respect).
That's the way Mailman 3 is designed. Changing it would be a major undertaking.
Consider the case where default nonmember action is hold rather than discard. Then when handling a nonmember post, the moderator can set the nonmember's moderation to default processing to essentially accept future posts from that nonmember if the nonmember has a legitimate reason to post, or to discard if the nonmember is a spammer.
If you think it would help, you might consider colorizing the roles on that page so perhaps nonmember could be in red. This should be a simple patch to Postorius.
But our lists don't accept messages from non-members. Such messages are quietly discarded, as most are spam, as mentioned above. So now the user is neither getting emails from the lists nor is unable to send messages to the list. The next step for the user is to complain to me. ☹
Why didn't you (or the moderator) accept the held subscription at the beginning?
I have looked for a template that could be used to warn someone when he/she is added as a non-member, but did not find one. It's also not clear that I'd want one, as most of these non-subscriptions are by spammers and I prefer not to reply to spammers. __
I tried your suggestion below, Mark. Here's my transcript:
Welcome to the GNU Mailman shell Use commit() to commit changes. Use abort() to discard changes since the last commit. Exit with ctrl+D does an implicit commit() but exit() does not.
lm = getUtility(IListManager) for l in lm: ... for nm in l.nonmembers.members: ... nm.unsubscribe() ...
I did this twice, once with commit() and once typing ctrl/d (ctrl/D) just gave me a beep. Calling commit() did not return to the ... as in your example, but showed the >>> prompt, so I tried ctrl/D (beep) and then ctrl/d (exit).
My example did not show a ...
in response to commit(). Commit() was
followed by three backticks which is markup for the end if the literal
text. The >>> following commit() is expected.
Either calling commit() explicitly or exiting with ctrl-D should commit the changes.
I then went to the Postorius page for one of the lists and found that all the non-members were still present.
I don't know why this would be. I tested that script and it worked for me.
My original point is the presence of a nonmember role should not prevent the user from subscribing. If there is an issue with subscribing it is probably because of the outstanding subscription request waiting moderator approval.
I understand that you would like the nonmember role to disappear, but that isn't going to happen in the distribution, and I can't undertake the extensive effort required to figure out how you can do it for your site.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
Mark Sapiro writes:
My original point is the presence of a nonmember role should not prevent the user from subscribing. If there is an issue with subscribing it is probably because of the outstanding subscription request waiting moderator approval.
I don't think it is likely, but is it possible that the moderator is not just refusing the subscription, but banning the address from subscribing?
I understand that you would like the nonmember role to disappear, but that isn't going to happen in the distribution, and I can't undertake the extensive effort required to figure out how you can do it for your site.
It seems to me that explicitly displaying the nonmember role is an internal and/or administrative need, and most ordinary users are only interested in whether they are subscribed or not. If the list appears in "their" list of list, they're going to assume they're subscribed. (We've even had that confusion about moderators and owners in the past.) I haven't done any deep thinking about this, but perhaps we could provide a more streamlined view tuned to this specific need? That is, the role won't go away, but at least in some contexts you'll have to ask explicitly for that user-list relationship to be displayed.
Also, IIRC Allan's community contains a substantial group of folks with visual impairments, presumably including admins and moderators. Especially to serve that circumstance I think it makes sense for us to provide streamlined views that are more easily grasped as a whole where we can.
Thank you, Stephen.
Yes, I have verified that the users will be subscribed once the moderator accepts their subscription requests. The tricky time is between the non-member record is created and the moderator accepts the application. Many of them will try to post before their subscription is approved (some moderators are good at procrastinating). During this time the user thinks that the subscription has been entered, but is not able to send/receive messages. Then they complain to me...
While some of the users and moderators may have visual impairments (well, it's possible that even a majority wears glasses - I do), the bigger issue is that most are not techies, and some are very much not techies. They are brilliant in other ways and Mailman has been a wonderful tool for them all to communicate and organize, but it's also a bit quirky.
Yours,
Allan
On 9/16/22, 23:28 , "Stephen J. Turnbull" <stephenjturnbull@gmail.com> wrote:
Mark Sapiro writes:
> My original point is the presence of a nonmember role should not prevent
> the user from subscribing. If there is an issue with subscribing it is
> probably because of the outstanding subscription request waiting
> moderator approval.
I don't think it is likely, but is it possible that the moderator is
not just refusing the subscription, but banning the address from
subscribing?
> I understand that you would like the nonmember role to disappear, but
> that isn't going to happen in the distribution, and I can't undertake
> the extensive effort required to figure out how you can do it for your site.
It seems to me that explicitly displaying the nonmember role is an
internal and/or administrative need, and most ordinary users are only
interested in whether they are subscribed or not. If the list appears
in "their" list of list, they're going to assume they're subscribed.
(We've even had that confusion about moderators and owners in the
past.) I haven't done any deep thinking about this, but perhaps we
could provide a more streamlined view tuned to this specific need?
That is, the role won't go away, but at least in some contexts you'll
have to ask explicitly for that user-list relationship to be
displayed.
Also, IIRC Allan's community contains a substantial group of folks
with visual impairments, presumably including admins and moderators.
Especially to serve that circumstance I think it makes sense for us
to provide streamlined views that are more easily grasped as a whole
where we can.
_______________________________________________
Mailman-users mailing list -- mailman-users@mailman3.org
To unsubscribe send an email to mailman-users-leave@mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Hi Mike,
Yes, the users can be subscribed, but they think that they can't because it seems they are until the moderator accepts them.
I tried your script again, with nothing happening. So I tried this:
a = 1 b = 1 for l in lm:
... print(a) ... a = a+1 ... for nm in l.nonmembers.members: ... print(b) ... b = b + 1 ... nm.unsubscribe() ...
commit() print(a) 1 print(b) 1
It appears that lm can't see the lists (I have 50+ of them).
Yours,
Allan
On 9/16/22, 15:01 , "Mark Sapiro" <mark@msapiro.net> wrote:
On 9/16/22 11:19, Allan Hansen wrote:
> Hi all,
>
> This is a bit of an emergency:
>
> I am getting a bunch of complaints from potential list members of my lists that they can't subscribe and they don't get messages. Apparently, the issue is that they are non-members. I have never created any non-members but looking at the docs it seems that if someone sends a message to the list, they automatically become non-members.
> For individuals I have been able to delete their non-membership and they then could subscribe properly.
I don't understand. the fact that an address is a non-member of a list
should not impact subscribing that address as a member.
> I have looked at some of my most popular lists and they have hundreds of non-members! It will take me an awful amount of time to remove each one manually, and not doing it - handling each as they complain - is also a lot of waste of time and cause of frustration for all involved.
What is actually happening when the non-member attempts to subscribe as
a member? What do they do and what it the result?
> I have tried scripting it with delmember, but it does not take the '-r nonmember' option ('findmember' does!).
>
> Can anyone help me find out how to
> a. delete all non-members of all my lists
If you have access to `mailman shell` you could do:
```
$ mailman shell
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
>>> lm = getUtility(IListManager)
>>> for l in lm:
... for nm in l.nonmembers.members:
... nm.unsubscribe()
...
>>> commit()
```
> b. prevent MM3 from creating new non-members in the future (so I don't have to keep removing them)
nonmembers are an integral part of Mailman 3's architecture. The basic
idea is a nonmember has a moderation action and setting a nonmembers
moderation replaces MM 2.1's adding that address to one of
*_these_nonmembers (The legacy *_these_nonmembers attributes still
exist, but only to support regexps).
It would require extensive modification to not create nonmembers.
However, I still don't understand why the presence of a nonmember record
is an issue.
--
Mark Sapiro <mark@msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users@mailman3.org
To unsubscribe send an email to mailman-users-leave@mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
On 9/17/22 10:03, Allan Hansen wrote:
Hi Mike,
Yes, the users can be subscribed, but they think that they can't because it seems they are until the moderator accepts them.
I tried your script again, with nothing happening. So I tried this:
a = 1 b = 1 for l in lm:
... print(a) ... a = a+1 ... for nm in l.nonmembers.members: ... print(b) ... b = b + 1 ... nm.unsubscribe() ...
commit() print(a) 1 print(b) 1
It appears that lm can't see the lists (I have 50+ of them).
Did you start with
lm = getUtility(IListManager)
?
What if you do
>>> lm = getUtility(IListManager)
>>> for l in lm:
... print(l.posting_address)
...
That should print the posting address for all the lists.
What does mailman info
show? In particular, for config file:
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
Sure:
lm = getUtility(IListManager) for l in lm: ... print(l.posting_address) ...
Nothing here, either.
Yours,
Allan
On 9/17/22, 10:30 , "Mark Sapiro" <mark@msapiro.net> wrote:
On 9/17/22 10:03, Allan Hansen wrote:
> Hi Mike,
>
> Yes, the users can be subscribed, but they think that they can't because it seems they are until the moderator accepts them.
>
> I tried your script again, with nothing happening. So I tried this:
>
>>>>
>>>> a = 1
>>>> b = 1
>>>> for l in lm:
> ... print(a)
> ... a = a+1
> ... for nm in l.nonmembers.members:
> ... print(b)
> ... b = b + 1
> ... nm.unsubscribe()
> ...
>>>> commit()
>>>> print(a)
> 1
>>>> print(b)
> 1
>
>
> It appears that lm can't see the lists (I have 50+ of them).
Did you start with
lm = getUtility(IListManager)
?
What if you do
```
>>> lm = getUtility(IListManager)
>>> for l in lm:
... print(l.posting_address)
...
```
That should print the posting address for all the lists.
What does `mailman info` show? In particular, for `config file:`
--
Mark Sapiro <mark@msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users@mailman3.org
To unsubscribe send an email to mailman-users-leave@mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
On 9/17/22 11:01 AM, Allan Hansen wrote:
Sure:
lm = getUtility(IListManager) for l in lm: ... print(l.posting_address) ...
Nothing here, either.
So your mailman shell
command is not pointing at your productiom
mailman.cfg. Try mailman -C /path/to/production/mailman.cfg shell
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
That worked, Mark. Thank you. Now I just have to figure out how to put it all in a script for the cron utility, so I can run it daily (or hourly, for that matter). But for now I have no more non-members. Yours,
Allan
As for non-members, the list settings for 'Message Acceptance' has a number of options to accept, hold, reject or discard messages for a list of addresses (entered using regexps, even) of non-members. Under 'Users' there is an option to add non-members. Given this, the notion that non-members are being automatically created in the database, has been a source of confusion to me, let alone my users/moderators.
On 9/17/22, 11:18 , "Mark Sapiro" <mark@msapiro.net> wrote:
On 9/17/22 11:01 AM, Allan Hansen wrote:
> Sure:
>
>>>> lm = getUtility(IListManager)
>>>> for l in lm:
> ... print(l.posting_address)
> ...
>>>>
>
> Nothing here, either.
So your `mailman shell` command is not pointing at your productiom
mailman.cfg. Try `mailman -C /path/to/production/mailman.cfg shell`
--
Mark Sapiro <mark@msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users@mailman3.org
To unsubscribe send an email to mailman-users-leave@mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
participants (3)
-
Allan Hansen
-
Mark Sapiro
-
Stephen J. Turnbull