========================= Subscription moderation ========================= Subscription (and sometimes unsubscription) requests can similarly be accepted, discarded, rejected, or deferred by the list moderators. Viewing subscription requests ============================= A mailing list starts with no pending subscription or unsubscription requests. >>> ant = create_list('ant@example.com') >>> ant.admin_immed_notify = False >>> from mailman.interfaces.mailinglist import SubscriptionPolicy >>> ant.subscription_policy = SubscriptionPolicy.moderate >>> transaction.commit() >>> dump_json('http://localhost:9001/3.0/lists/ant@example.com/requests') http_etag: "..." start: 0 total_size: 0 When Anne tries to subscribe to the Ant list, her subscription is held for moderator approval. >>> from mailman.interfaces.registrar import IRegistrar >>> from mailman.interfaces.usermanager import IUserManager >>> from zope.component import getUtility >>> registrar = IRegistrar(ant) >>> manager = getUtility(IUserManager) >>> anne = manager.create_address('anne@example.com', 'Anne Person') >>> token, token_owner, member = registrar.register( ... anne, pre_verified=True, pre_confirmed=True) >>> print(member) None The message is being held for moderator approval. >>> print(token_owner.name) moderator The subscription request can be viewed in the REST API. >>> transaction.commit() >>> dump_json('http://localhost:9001/3.0/lists/ant@example.com/requests') entry 0: display_name: Anne Person email: anne@example.com http_etag: "..." list_id: ant.example.com token: ... token_owner: moderator when: 2005-08-01T07:49:23 http_etag: "..." start: 0 total_size: 1 Viewing individual requests =========================== You can view an individual membership change request by providing the token (a.k.a. request id). Anne's subscription request looks like this. >>> dump_json('http://localhost:9001/3.0/lists/ant@example.com/' ... 'requests/{}'.format(token)) display_name: Anne Person email: anne@example.com http_etag: "..." list_id: ant.example.com token: ... token_owner: moderator when: 2005-08-01T07:49:23 Disposing of subscription requests ================================== Moderators can dispose of held subscription requests by POSTing back to the request's resource. The POST data requires an action of one of the following: * discard - throw the request away. * reject - the request is denied and a notification is sent to the email address requesting the membership change. * defer - defer any action on this membership change (continue to hold it). * accept - accept the membership change. Anne's subscription request is accepted. >>> dump_json('http://localhost:9001/3.0/lists/' ... 'ant@example.com/requests/{}'.format(token), ... {'action': 'accept'}) content-length: 0 date: ... server: ... status: 204 Anne is now a member of the mailing list. >>> ant.members.get_member('anne@example.com') on ant@example.com as MemberRole.member> There are no more membership change requests. >>> dump_json('http://localhost:9001/3.0/lists/ant@example.com/requests') http_etag: "..." start: 0 total_size: 0