# Copyright (C) 2002-2018 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. """ unsubscribe [password] [address=
] Unsubscribe from the mailing list. If given, your password must match your current password. If omitted, a confirmation email will be sent to the unsubscribing address. If you wish to unsubscribe an address other than the address you sent this request from, you may specify `address=
' (no brackets around the email address, and no quotes!) """ from email.Utils import parseaddr from Mailman import Errors from Mailman.i18n import _ STOP = 1 def gethelp(mlist): return _(__doc__) def process(res, args): mlist = res.mlist password = None address = None argnum = 0 for arg in args: if arg.startswith('address='): address = arg[8:] elif argnum == 0: password = arg else: res.results.append(_('Usage:')) res.results.append(gethelp(mlist)) return STOP argnum += 1 # Fill in empty defaults if address is None: realname, address = parseaddr(res.msg['from']) if not mlist.isMember(address): listname = mlist.real_name res.results.append( _('%(address)s is not a member of the %(listname)s mailing list')) return STOP # If we're doing admin-approved unsubs, don't worry about the password if mlist.unsubscribe_policy: try: mlist.DeleteMember(address, 'mailcmd') except Errors.MMNeedApproval: res.results.append(_("""\ Your unsubscription request has been forwarded to the list administrator for approval.""")) elif password is None: # No password was given, so we need to do a mailback confirmation # instead of unsubscribing them here. cpaddr = mlist.getMemberCPAddress(address) try: mlist.ConfirmUnsubscription(cpaddr) except Errors.MMAlreadyPending: res.results.append( _('You already have a subscription pending confirmation')) else: # We don't also need to send a confirmation to this command res.respond = 0 else: # No admin approval is necessary, so we can just delete them if the # passwords match. oldpw = mlist.getMemberPassword(address) if oldpw <> password: res.results.append(_('You gave the wrong password')) return STOP mlist.ApprovedDeleteMember(address, 'mailcmd') res.results.append(_('Unsubscription request succeeded.'))