[Mailman-Users] Remove Members waiting for Moderator Approval viaCommand Line

Mark Sapiro mark at msapiro.net
Wed Oct 12 02:51:43 CEST 2011

Phil wrote:
>I'm trying to kill a pending subscription to a mailing list via the command
>line because the domain owner forgot to register the main domain of our site
>and we can't approve/deny membership via the web admin interface.
>I've tried to remove the e-mail address pending approval via the
>remove_members command and it seem to only react to active and approved
>members of a mailing list.

That's correct. remove_members only removes members. A pending
subscription is not (yet) a member.

>Is there a way to approve / deny a pending user request via shell?

Do you mean a subscription request that is waiting moderator approval
because subscribe_policy is 'Require approval' or 'Confirm and
approve' or one that is waiting user confirmation because
subscribe_policy is 'Confirm' or 'Confirm and approve'? It seems you
mean the former.

Deleting a subscription waiting approval is a multi step process with
existing tools.

First run

/path/to/mailman/bin/dumpdb /path/to/mailman/lists/LISTNAME/pending.pck

This will report something like

[----- start pickle file -----]
<----- start object 1 ----->
{   104: (   2,
             (   1318366634.8118629,
                 'user at example.com',
                 'User Name',
    'version': (0, 1)}
[----- end pickle file -----]

There may be more entries than above, but those other than

    'version': (0, 1)

are all pending requests of some kind. Each will have a numeric key,
104 in the above followed by a 2-tuple consisting of a number
indicating the request type (1 for a held message, 2 for a held
subscription or 3 for a held unsubscription) and a tuple of
information the format of which depends on the type.

You are interested in type 2 as above and the information tuple is
(time stamp, e-mail address, real name, password, digest flag,
language). Find the key(s) of the one(s) you want to discard, in the
example above, 104.

Then run 

/path/to/mailman/bin/withlist -l LISTNAME

which will respond

Loading list LISTNAME (locked)
The variable `m' is the LISTNAME MailList instance

at the >>> prompts, type

>>> from Mailman.mm_cfg import DISCARD
>>> m.HandleRequest(104, DISCARD)

(Use the key from your request instead of 104 - this should not print
any error. You can repeat the above multiple times with other keys if
you have more that one request to discard.)

>>> m.Save()

(This is important to save the state of the list.)

>>>       <- at this prompt type control-D to exit which should respond
Unlocking (but not saving) list: LISTNAME

The discards will be logged in Mailman's vette log.

The above method can be used to discard a held message, but Mailman's
bin/discard is simpler.

Mark Sapiro <mark at msapiro.net>        The highway is for gamblers,
San Francisco Bay Area, California    better use your sense - B. Dylan

More information about the Mailman-Users mailing list