
On 3/3/25 14:27, Andy Matthews wrote:
We're using Mailman 3.3.9.
Entity<Form> data = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE); response = getTarget().path("lists/" + listId + "/config").request().method("PATCH", data);
You are patching the list's config and with that patch you are replacing
the old value of accept_these_nonmembers
with the new, not appending
the new value. You would need to retrieve the existing value, update it
and PATCH that.
However, as you know, that setting is deprecated and exists only to
support the regexp and @list type of entries. For explicit email
addresses, the intent is to create a nonmember and set the nonmember's
moderation_action to defer
- you normally don't want accept
because
that bypasses all the subsequent checks such as administrivia,
implicit-dest, max_recipients, max_size, , no_subject, etc.
The result of these two API calls is that both the subscribers and nonmembers properties of the mailing list are updated to include the new email (let's call it abc@123.com). The user can immediately send another email which is not held for moderation. The issue comes when a different nonmember sends an email and is approved (let's call it xyz@789.com). For some reason this blows out the "always accept" status of user abc@123.com and requires their email to be approved again.
After some research I believe this is because the
accept_these_nonmembers
property has been deprecated (which seems valid because that property remains an empty array). Additional reading seems to indicate that we can now setmoderation_action
on each individual user which supercedes the mailing list'sdefault_nonmember_action
property (in our case it isAction.hold
).
That is correct, and that is the intended way to deal with nonmember moderation.
The docs indicate that I should be able to submit a patch request to update the moderation action for any user: https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/m...
But it requires the user ID. And when trying to get the user_id for a nonmember it appears that it is not returned by the API. The following call:
/3.0/addresses/abc@123.com
returns
{ "email": "abc@123.com", "original_email": "abc@123.com", "registered_on": "2025-03-03T19:18:35.169703", "self_link": "https://0.0.0.0:8001/3.0/addresses/abc@123.com", "http_etag": "\"92c44d0b3b323450f3576e6352acb59b4cc5d6f0a\"" }
So I'm not sure how I would be able to update this particular record without a member or user id.
So, all that said, I'm looking for information on how to do one of the following.
- When submitting a user's email to the
accept_these_nonmembers
, is there a way to indicate that themember.moderation_action
should be a specific value?
No. You can put the email in the appropriate *_these_nonmembers, but that does only that. It doesn't affect the nonmember's moderation_action, nor does it create a nonmember if there isn't one already, but if there is a nonmember with non-None moderation_action, that action takes precedence over *_these_nonmembers.
- Retrieve a nonmember record and have it include a member or user id that I can use to explicitly update the
member.moderation_action
value?
You must be able to set a nonmember's moderation_action via REST. (The docs may need updating.) Postorius does it, so it can be done, but I don't offhand know the endpoint and I'm leaving the country for vacation tomorrow and don't have time to research it.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan