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 [email protected]). 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 [email protected]). For some reason this blows out the
"always accept" status of user [email protected] 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/membership.html#moderating-a-member
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/[email protected]`
returns
```
{
"email": "[email protected]",
"original_email": "[email protected]",
"registered_on": "2025-03-03T19:18:35.169703",
"self_link": "https://0.0.0.0:8001/3.0/addresses/[email protected]",
"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.
1. When submitting a user's email to the `accept_these_nonmembers`, is there a
way to indicate that the `member.moderation_action` should be a specific value?
2. 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?
_______________________________________________
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/DRPVEOHE75XFZ5QW6XAKOCMDJHXCXBZZ/
This message sent to [email protected]