summaryrefslogtreecommitdiff
path: root/Mailman/MailList.py
diff options
context:
space:
mode:
authorbwarsaw2001-10-21 06:32:36 +0000
committerbwarsaw2001-10-21 06:32:36 +0000
commit39ee0e54a8e433def508d650afdcec1376b32529 (patch)
treeb8196e084c55795e01d87a0a67fd0c4750149750 /Mailman/MailList.py
parentd181b10f3231e1cb4e1cfb590940e3992d3d038e (diff)
downloadmailman-39ee0e54a8e433def508d650afdcec1376b32529.tar.gz
mailman-39ee0e54a8e433def508d650afdcec1376b32529.tar.zst
mailman-39ee0e54a8e433def508d650afdcec1376b32529.zip
InitVars(): New MailList attributes:
send_goodbye_msg: Says whether to send the goodbye_msg to members when they get unsubscribed. unsubscribe_policy: What is this list's policy on unsubscribes? (0 == unrestricted, 1 == admin approval) include_rfc2369_headers: Should the RFC 2369 headers be included in the messages? Defaults to yes (and requires site admin complicity to disable). DeleteMember(): New method which first checks unsubscribe_policy before deleting the member address. ApprovedDeleteMember(): Change userack default argument value to None. Also, when userack is None, default it to the value of self.send_goodbye_msg. Then of course, only send the unsubscribe ack if userack is true.
Diffstat (limited to 'Mailman/MailList.py')
-rw-r--r--Mailman/MailList.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 44cffa80d..69fb500a9 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -275,6 +275,7 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
mm_cfg.DEFAULT_UMBRELLA_MEMBER_ADMIN_SUFFIX
self.send_reminders = mm_cfg.DEFAULT_SEND_REMINDERS
self.send_welcome_msg = mm_cfg.DEFAULT_SEND_WELCOME_MSG
+ self.send_goodbye_msg = mm_cfg.DEFAULT_SEND_GOODBYE_MSG
self.bounce_matching_headers = \
mm_cfg.DEFAULT_BOUNCE_MATCHING_HEADERS
self.anonymous_list = mm_cfg.DEFAULT_ANONYMOUS_LIST
@@ -285,6 +286,7 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
self.welcome_msg = ''
self.goodbye_msg = ''
self.subscribe_policy = mm_cfg.DEFAULT_SUBSCRIBE_POLICY
+ self.unsubscribe_policy = mm_cfg.DEFAULT_UNSUBSCRIBE_POLICY
self.private_roster = mm_cfg.DEFAULT_PRIVATE_ROSTER
self.obscure_addresses = mm_cfg.DEFAULT_OBSCURE_ADDRESSES
self.host_name = mm_cfg.DEFAULT_HOST_NAME
@@ -292,6 +294,7 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
self.administrivia = mm_cfg.DEFAULT_ADMINISTRIVIA
self.preferred_language = mm_cfg.DEFAULT_SERVER_LANGUAGE
self.available_languages = []
+ self.include_rfc2369_headers = 1
# Analogs to these are initted in Digester.InitVars
self.nondigestable = mm_cfg.DEFAULT_NONDIGESTABLE
self.personalize = 0
@@ -690,7 +693,6 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
ack = self.send_welcome_msg
if admin_notif is None:
admin_notif = self.admin_notify_mchanges
-
# Suck values out of userdesc, and apply defaults.
email = Utils.LCDomain(userdesc.address)
name = getattr(userdesc, 'fullname', '')
@@ -702,12 +704,11 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
digest = 0
else:
digest = 1
-
# Let's be extra cautious
Utils.ValidateEmail(email)
if self.isMember(email):
raise Errors.MMAlreadyAMember, email
-
+ # Do the actual addition
self.addNewMember(email, realname=name, digest=digest,
password=password, language=lang)
self.setMemberOption(email, mm_cfg.DisableMime,
@@ -719,10 +720,8 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
kind = ' (digest)'
else:
kind = ''
-
syslog('subscribe', '%s: new%s %s (%s)', self.internal_name(),
kind, email, name)
-
if ack:
self.SendSubscribeAck(email, self.getMemberPassword(email), digest)
if admin_notif:
@@ -739,11 +738,21 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
subject, text)
msg.send(self)
+ def DeleteMember(self, name, whence=None, admin_notif=0, userack=1):
+ realname, email = parseaddr(name)
+ if self.unsubscribe_policy == 0:
+ self.ApprovedDeleteMember(name, whence, admin_notif, userack)
+ else:
+ self.HoldUnsubscription(email)
+ raise Errors.MMNeedApproval, _(
+ 'unsubscriptions require moderator approval')
+
def ApprovedDeleteMember(self, name, whence=None,
- admin_notif=None, userack=1):
+ admin_notif=None, userack=None):
+ if userack is None:
+ userack = self.send_goodbye_msg
if admin_notif is None:
admin_notif = self.admin_notify_mchanges
-
# Delete a member, for which we know the approval has been made
fullname, emailaddr = parseaddr(name)
if not self.isMember(emailaddr):
@@ -751,7 +760,7 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
# Remove the member
self.removeMember(emailaddr)
# And send an acknowledgement to the user...
- if userack and self.goodbye_msg and len(self.goodbye_msg):
+ if userack:
self.SendUnsubscribeAck(name)
# ...and to the administrator
if admin_notif: