
We're using Mailman 3.3.9.
My team and I have written a simple UI for displaying and approving/rejecting held messages from non list members. When an email receives an "always accept" flag from the UI we call the API to pass in the requested information:
Form form = new Form();
form.param("action", "accept");
Entity<Form> data = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE);
String safePath = UriBuilder.fromPath("lists/{listId}/held/{messageId}").build(listId, messageId).toString();
response = getTarget().path(safePath).request().post(data);
If that request is successful we update the accept_these_nonmembers
property of the mailing list with the user's email.
Form form = new Form();
if (fieldValue.getClass().isArray()) {
for (String val : (String[])fieldValue) {
form.param(property, String.valueOf(val));
}
} else {
form.param(property, String.valueOf(fieldValue));
}
Entity<Form> data = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE);
response = getTarget().path("lists/" + listId + "/config").request().method("PATCH", data);
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 set moderation_action
on each individual user which supercedes the mailing list's default_nonmember_action
property (in our case it is Action.hold
).
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? - 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?
There may of course be additional approaches that I'm not considering, but that's about the gist of it. Thoughts?