summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbwarsaw2006-07-08 18:02:57 +0000
committerbwarsaw2006-07-08 18:02:57 +0000
commitc6bd2024ebcb3982bb07c3fed1bb13d7ded332bd (patch)
treef94e3945ec69c35be0bad5abeaa71df53b535351
parentf321ff8f419284c32f7eea4e06c83212bccef6b0 (diff)
downloadmailman-c6bd2024ebcb3982bb07c3fed1bb13d7ded332bd.tar.gz
mailman-c6bd2024ebcb3982bb07c3fed1bb13d7ded332bd.tar.zst
mailman-c6bd2024ebcb3982bb07c3fed1bb13d7ded332bd.zip
Fix some buglets with virtual domain support and repair unit tests broken by
this change. More unit tests should be added. misc/sitelist.cfg is removed -- this is an ex-site list. MailList.GetNoReplyEmail() -> MailList.no_reply_address (property) UserNotification._enqueue(), OwnerNotification._enqueue(): when queing the message to the virgin queue, be sure to use the fully qualified (i.e. posting) address for the list. In the MTA modules, be sure to set up the target of the mail commands as the fqdn listname because otherwise we can't find the correct list. This needs some tweaking/testing for Postfix's virtual domain support. MailList.Load() has to grow an optional argument specifying the fqdn listname. The problem is that in some situations, we can't calculate that because we don't know _internal_name, so it has to be passed in. This is mostly the case in the MailList ctor where a Load hasn't happened yet. For backward compatibility though, if it's not passed in, just use mlist.fqdn_listname.
-rw-r--r--Mailman/Bouncer.py4
-rw-r--r--Mailman/Cgi/create.py5
-rw-r--r--Mailman/Cgi/rmlist.py2
-rw-r--r--Mailman/Handlers/ToDigest.py4
-rw-r--r--Mailman/Handlers/ToOutgoing.py2
-rw-r--r--Mailman/Handlers/ToUsenet.py2
-rw-r--r--Mailman/MTA/Manual.py4
-rw-r--r--Mailman/MTA/Postfix.py4
-rw-r--r--Mailman/MTA/Utils.py15
-rw-r--r--Mailman/MailList.py25
-rw-r--r--Mailman/Message.py4
-rw-r--r--Mailman/Queue/IncomingRunner.py2
-rw-r--r--Mailman/bin/add_members.py2
-rw-r--r--Mailman/bin/change_pw.py2
-rw-r--r--Mailman/bin/newlist.py4
-rw-r--r--Mailman/testing/base.py25
-rw-r--r--Mailman/testing/emailbase.py36
-rw-r--r--Mailman/testing/test_handlers.py348
-rw-r--r--Mailman/testing/test_message.py33
-rw-r--r--misc/sitelist.cfg376
20 files changed, 273 insertions, 626 deletions
diff --git a/Mailman/Bouncer.py b/Mailman/Bouncer.py
index 1a5d10a8a..aabe9d5ad 100644
--- a/Mailman/Bouncer.py
+++ b/Mailman/Bouncer.py
@@ -194,11 +194,11 @@ class Bouncer:
'did' : _('disabled'),
'but' : '',
'reenable' : '',
- 'owneraddr': self.GetNoReplyEmail(),
+ 'owneraddr': self.no_reply_address,
}, mlist=self)
subject = _('Bounce action notification')
umsg = Message.UserNotification(self.GetOwnerEmail(),
- self.GetNoReplyEmail(),
+ self.no_reply_address,
subject,
lang=self.preferred_language)
# BAW: Be sure you set the type before trying to attach, or you'll get
diff --git a/Mailman/Cgi/create.py b/Mailman/Cgi/create.py
index da66c2f7e..33236ad25 100644
--- a/Mailman/Cgi/create.py
+++ b/Mailman/Cgi/create.py
@@ -217,7 +217,6 @@ def process_request(doc, cgidata):
sys.modules[modname].create(mlist, cgi=True)
# And send the notice to the list owner.
if notify:
- siteowner = mlist.GetNoReplyEmail()
text = Utils.maketext(
'newlist.txt',
{'listname' : listname,
@@ -225,10 +224,10 @@ def process_request(doc, cgidata):
'admin_url' : mlist.GetScriptURL('admin', absolute=True),
'listinfo_url': mlist.GetScriptURL('listinfo', absolute=True),
'requestaddr' : mlist.GetRequestEmail(),
- 'siteowner' : siteowner,
+ 'siteowner' : mlist.no_reply_address,
}, mlist=mlist)
msg = Message.UserNotification(
- owner, siteowner,
+ owner, mlist.no_reply_address,
_('Your new mailing list: $listname'),
text, mlist.preferred_language)
msg.send(mlist)
diff --git a/Mailman/Cgi/rmlist.py b/Mailman/Cgi/rmlist.py
index e10e77b6e..78bc5d4f7 100644
--- a/Mailman/Cgi/rmlist.py
+++ b/Mailman/Cgi/rmlist.py
@@ -168,7 +168,7 @@ def process_request(doc, cgidata, mlist):
table.AddRow([_('''You have successfully deleted the mailing list
<b>%(listname)s</b>.''')])
else:
- sitelist = mlist.GetNoReplyEmail()
+ sitelist = mlist.no_reply_address
table.AddRow([_('''There were some problems deleting the mailing list
<b>%(listname)s</b>. Contact your site administrator at %(sitelist)s
for details.''')])
diff --git a/Mailman/Handlers/ToDigest.py b/Mailman/Handlers/ToDigest.py
index 9d8cc1af0..f759e82c8 100644
--- a/Mailman/Handlers/ToDigest.py
+++ b/Mailman/Handlers/ToDigest.py
@@ -398,11 +398,11 @@ def send_i18n_digests(mlist, mboxfp):
# MIME
virginq.enqueue(mimemsg,
recips=mimerecips,
- listname=mlist.internal_name(),
+ listname=mlist.fqdn_listname,
isdigest=True)
# RFC 1153
rfc1153msg.set_payload(plainmsg.getvalue(), lcset)
virginq.enqueue(rfc1153msg,
recips=plainrecips,
- listname=mlist.internal_name(),
+ listname=mlist.fqdn_listname,
isdigest=True)
diff --git a/Mailman/Handlers/ToOutgoing.py b/Mailman/Handlers/ToOutgoing.py
index c29f83f76..cc266c130 100644
--- a/Mailman/Handlers/ToOutgoing.py
+++ b/Mailman/Handlers/ToOutgoing.py
@@ -53,4 +53,4 @@ def process(mlist, msg, msgdata):
msgdata['verp'] = not (int(mlist.post_id) % interval)
# And now drop the message in qfiles/out
outq = get_switchboard(config.OUTQUEUE_DIR)
- outq.enqueue(msg, msgdata, listname=mlist.internal_name())
+ outq.enqueue(msg, msgdata, listname=mlist.fqdn_listname)
diff --git a/Mailman/Handlers/ToUsenet.py b/Mailman/Handlers/ToUsenet.py
index 5ca926164..8edb471d2 100644
--- a/Mailman/Handlers/ToUsenet.py
+++ b/Mailman/Handlers/ToUsenet.py
@@ -46,4 +46,4 @@ def process(mlist, msg, msgdata):
return
# Put the message in the news runner's queue
newsq = get_switchboard(config.NEWSQUEUE_DIR)
- newsq.enqueue(msg, msgdata, listname=mlist.internal_name())
+ newsq.enqueue(msg, msgdata, listname=mlist.fqdn_listname)
diff --git a/Mailman/MTA/Manual.py b/Mailman/MTA/Manual.py
index 4a3d6aec4..d49327765 100644
--- a/Mailman/MTA/Manual.py
+++ b/Mailman/MTA/Manual.py
@@ -78,7 +78,7 @@ equivalent) file by adding the following lines, and possibly running the
## %(listname)s mailing list""")
outfp = sys.stdout
# Common path
- for k, v in makealiases(listname):
+ for k, v in makealiases(mlist):
print >> outfp, k + ':', ((fieldsz - len(k)) * ' '), v
# If we're using the command line interface, we're done. For ttw, we need
# to actually send the message to mailman-owner now.
@@ -121,7 +121,7 @@ equivalent) file by removing the following lines, and possibly running the
## %(listname)s mailing list""")
outfp = sys.stdout
# Common path
- for k, v in makealiases(listname):
+ for k, v in makealiases(mlist):
print >> outfp, k + ':', ((fieldsz - len(k)) * ' '), v
# If we're using the command line interface, we're done. For ttw, we need
# to actually send the message to mailman-owner now.
diff --git a/Mailman/MTA/Postfix.py b/Mailman/MTA/Postfix.py
index 4301321e7..9f7b52d50 100644
--- a/Mailman/MTA/Postfix.py
+++ b/Mailman/MTA/Postfix.py
@@ -118,7 +118,7 @@ def _addvirtual(mlist, fp):
fieldsz = len(listname) + len('-unsubscribe')
hostname = mlist.host_name
# Set up the mailman-loop address
- loopaddr = mlist.GetNoReplyEmail()
+ loopaddr = mlist.no_reply_address
loopdest = Utils.ParseEmail(loopaddr)[0]
# Seek to the end of the text file, but if it's empty write the standard
# disclaimer, and the loop catch address.
@@ -152,7 +152,7 @@ def _addvirtual(mlist, fp):
# Blech.
def _check_for_virtual_loopaddr(mlist, filename):
- loopaddr = mlist.GetNoReplyEmail()
+ loopaddr = mlist.no_reply_address
loopdest = Utils.ParseEmail(loopaddr)[0]
infp = open(filename)
omask = os.umask(007)
diff --git a/Mailman/MTA/Utils.py b/Mailman/MTA/Utils.py
index ef3df0cb8..cc26fae11 100644
--- a/Mailman/MTA/Utils.py
+++ b/Mailman/MTA/Utils.py
@@ -35,7 +35,7 @@ def getusername():
-def _makealiases_mailprog(listname):
+def _makealiases_mailprog(mlist):
wrapper = os.path.join(config.WRAPPER_DIR, 'mailman')
# Most of the list alias extensions are quite regular. I.e. if the
# message is delivered to listname-foobar, it will be filtered to a
@@ -47,18 +47,23 @@ def _makealiases_mailprog(listname):
# need for the -admin address anymore).
#
# Seed this with the special cases.
- aliases = [(listname, '"|%s post %s"' % (wrapper, listname)),
- ]
+ listname = mlist.internal_name()
+ fqdn_listname = mlist.fqdn_listname
+ aliases = [
+ (listname, '"|%s post %s"' % (wrapper, fqdn_listname)),
+ ]
for ext in ('admin', 'bounces', 'confirm', 'join', 'leave', 'owner',
'request', 'subscribe', 'unsubscribe'):
aliases.append(('%s-%s' % (listname, ext),
- '"|%s %s %s"' % (wrapper, ext, listname)))
+ '"|%s %s %s"' % (wrapper, ext, fqdn_listname)))
return aliases
-def _makealiases_maildir(listname):
+def _makealiases_maildir(mlist):
maildir = config.MAILDIR_DIR
+ listname = mlist.internal_name()
+ fqdn_listname = mlist.fqdn_listname
if not maildir.endswith('/'):
maildir += '/'
# Deliver everything using maildir style. This way there's no mail
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 069a0b397..de43887ef 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -125,7 +125,7 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
# This will load the database.
self.Lock()
else:
- self.Load()
+ self.Load(name)
def __getattr__(self, name):
# Because we're using delegation, we want to be sure that attribute
@@ -160,7 +160,7 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
# Must reload our database for consistency. Watch out for lists that
# don't exist.
try:
- self.Load()
+ self.Load(self.fqdn_listname)
except Exception:
self.Unlock()
raise
@@ -186,6 +186,10 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
def fqdn_listname(self):
return '%s@%s' % (self._internal_name, self.host_name)
+ @property
+ def no_reply_address(self):
+ return '%s@%s' % (config.NO_REPLY_ADDRESS, self.host_name)
+
def getListAddress(self, extra=None):
if extra is None:
return self.fqdn_listname
@@ -198,9 +202,6 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
def GetOwnerEmail(self):
return self.getListAddress('owner')
- def GetNoReplyEmail(self):
- return '%s@%s' % (config.NO_REPLY_ADDRESS, self.host_name)
-
def GetRequestEmail(self, cookie=''):
if config.VERP_CONFIRMATIONS and cookie:
return self.GetConfirmEmail(cookie)
@@ -277,7 +278,11 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
self.__lock = LockFile.LockFile(
os.path.join(config.LOCK_DIR, name or '<site>') + '.lock',
lifetime=config.LIST_LOCK_LIFETIME)
- self._internal_name = name
+ # XXX FIXME Sometimes name is fully qualified, sometimes it's not.
+ if name and '@' in name:
+ self._internal_name, email_host = name.split('@', 1)
+ else:
+ self._internal_name = name
if name:
self._full_path = os.path.join(config.LIST_DATA_DIR, name)
else:
@@ -621,8 +626,10 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
self.__timestamp = mtime
return d, None
- def Load(self, check_version=True):
- if not Utils.list_exists(self.internal_name()):
+ def Load(self, fqdn_listname=None, check_version=True):
+ if fqdn_listname is None:
+ fqdn_listname = self.fqdn_listname
+ if not Utils.list_exists(fqdn_listname):
raise Errors.MMUnknownListError
# We first try to load config.pck, which contains the up-to-date
# version of the database. If that fails, perhaps because it's
@@ -717,7 +724,7 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin,
# Then reload the database (but don't recurse). Force a reload even
# if we have the most up-to-date state.
self.__timestamp = 0
- self.Load(check_version=0)
+ self.Load(self.fqdn_listname, check_version=False)
# We must hold the list lock in order to update the schema
waslocked = self.Locked()
if not waslocked:
diff --git a/Mailman/Message.py b/Mailman/Message.py
index acad25680..a8a58ae96 100644
--- a/Mailman/Message.py
+++ b/Mailman/Message.py
@@ -248,7 +248,7 @@ class UserNotification(Message):
virginq = get_switchboard(config.VIRGINQUEUE_DIR)
# The message metadata better have a `recip' attribute
virginq.enqueue(self,
- listname=mlist.internal_name(),
+ listname=mlist.fqdn_listname,
recips=self.recips,
nodecorate=True,
reduced_list_headers=True,
@@ -277,7 +277,7 @@ class OwnerNotification(UserNotification):
virginq = get_switchboard(config.VIRGINQUEUE_DIR)
# The message metadata better have a `recip' attribute
virginq.enqueue(self,
- listname=mlist.internal_name(),
+ listname=mlist.fqdn_listname,
recips=self.recips,
nodecorate=True,
reduced_list_headers=True,
diff --git a/Mailman/Queue/IncomingRunner.py b/Mailman/Queue/IncomingRunner.py
index efd7072d8..e0dcd01a4 100644
--- a/Mailman/Queue/IncomingRunner.py
+++ b/Mailman/Queue/IncomingRunner.py
@@ -116,7 +116,7 @@ class IncomingRunner(Runner):
def _dispose(self, mlist, msg, msgdata):
if msgdata.get('envsender') is None:
- msg['envsender'] = mlist.GetNoReplyEmail()
+ msg['envsender'] = mlist.no_reply_address
# Try to get the list lock.
try:
mlist.Lock(timeout=config.LIST_LOCK_TIMEOUT)
diff --git a/Mailman/bin/add_members.py b/Mailman/bin/add_members.py
index 932e4f77d..2c0ffa868 100644
--- a/Mailman/bin/add_members.py
+++ b/Mailman/bin/add_members.py
@@ -202,7 +202,7 @@ def main():
if admin_notify:
subject = _('$mlist.real_name subscription notification')
msg = Message.UserNotification(
- mlist.owner, mlist.GetNoReplyEmail(), subject, s.getvalue(),
+ mlist.owner, mlist.no_reply_address, subject, s.getvalue(),
mlist.preferred_language)
msg.send(mlist)
diff --git a/Mailman/bin/change_pw.py b/Mailman/bin/change_pw.py
index 6c2beaf13..d77dd9787 100644
--- a/Mailman/bin/change_pw.py
+++ b/Mailman/bin/change_pw.py
@@ -155,7 +155,7 @@ def main():
hostname = mlist.host_name
adminurl = mlist.GetScriptURL('admin', absolute=True)
msg = Message.UserNotification(
- mlist.owner[:], mlist.GetNoReplyEmail(),
+ mlist.owner[:], mlist.no_reply_address,
_('Your new $listname list password'),
_('''\
The site administrator at $hostname has changed the password for your
diff --git a/Mailman/bin/newlist.py b/Mailman/bin/newlist.py
index 3136ef425..461cd9ee6 100644
--- a/Mailman/bin/newlist.py
+++ b/Mailman/bin/newlist.py
@@ -189,7 +189,7 @@ def main():
admin_url = mlist.GetScriptURL('admin', absolute=True),
listinfo_url = mlist.GetScriptURL('listinfo', absolute=True),
requestaddr = mlist.GetRequestEmail(),
- siteowner = mlist.GetNoReplyEmail(),
+ siteowner = mlist.no_reply_address,
)
text = Utils.maketext('newlist.txt', d, mlist=mlist)
# Set the I18N language to the list's preferred language so the header
@@ -199,7 +199,7 @@ def main():
i18n.set_language(mlist.preferred_language)
try:
msg = Message.UserNotification(
- owner_mail, mlist.GetNoReplyEmail(),
+ owner_mail, mlist.no_reply_address,
_('Your new mailing list: $listname'),
text, mlist.preferred_language)
msg.send(mlist)
diff --git a/Mailman/testing/base.py b/Mailman/testing/base.py
index 76c7243af..589ab0abb 100644
--- a/Mailman/testing/base.py
+++ b/Mailman/testing/base.py
@@ -18,8 +18,10 @@
"""Test base class which handles creating and deleting a test list."""
import os
+import stat
import shutil
import difflib
+import tempfile
import unittest
from cStringIO import StringIO
@@ -29,10 +31,17 @@ from Mailman import Utils
from Mailman.configuration import config
NL = '\n'
+PERMISSIONS = stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH
class TestBase(unittest.TestCase):
+ def _configure(self, fp):
+ print >> fp, 'add_domain("example.com", "www.example.com")'
+ # Only add this domain once to the current process
+ if 'example.com' not in config.domains:
+ config.add_domain('example.com', 'www.example.com')
+
def ndiffAssertEqual(self, first, second):
"""Like failUnlessEqual except use ndiff for readable output."""
if first <> second:
@@ -44,17 +53,25 @@ class TestBase(unittest.TestCase):
raise self.failureException(fp.getvalue())
def setUp(self):
+ # Write a temporary configuration file, but allow for subclasses to
+ # add additional data.
+ fd, self._config = tempfile.mkstemp(suffix='.cfg')
+ os.close(fd)
+ fp = open(self._config, 'w')
+ try:
+ self._configure(fp)
+ finally:
+ fp.close()
+ os.chmod(self._config, PERMISSIONS)
mlist = MailList.MailList()
- mlist.Create('_xtest', 'test@dom.ain', 'xxxxx')
- mlist.host_name = 'dom.ain'
- mlist.web_page_url = 'http://www.dom.ain/mailman/'
+ mlist.Create('_xtest@example.com', 'owner@example.com', 'xxxxx')
mlist.Save()
# This leaves the list in a locked state
self._mlist = mlist
def tearDown(self):
self._mlist.Unlock()
- listname = self._mlist.internal_name()
+ listname = self._mlist.fqdn_listname
for dirtmpl in ['lists/%s',
'archives/private/%s',
'archives/private/%s.mbox',
diff --git a/Mailman/testing/emailbase.py b/Mailman/testing/emailbase.py
index 7b80381b4..fa0512e91 100644
--- a/Mailman/testing/emailbase.py
+++ b/Mailman/testing/emailbase.py
@@ -18,18 +18,15 @@
"""Base class for tests that email things."""
import os
-import stat
import smtpd
import socket
import asyncore
-import tempfile
import subprocess
from Mailman.configuration import config
from Mailman.testing.base import TestBase
TESTPORT = 10825
-PERMISSIONS = stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH
@@ -53,31 +50,28 @@ class SinkServer(smtpd.SMTPServer):
class EmailBase(TestBase):
- def setUp(self):
- # Find an unused non-root requiring port to listen on. Set up a
- # configuration file that causes the underlying outgoing runner to use
- # the same port, then start Mailman.
- fd, self._configfile = tempfile.mkstemp(suffix='.cfg')
- fp = os.fdopen(fd, 'w')
+ def _configure(self, fp):
+ TestBase._configure(self, fp)
print >> fp, 'SMTPPORT =', TESTPORT
- config.SMTPPORT = TESTPORT
- fp.close()
- # Loosen up the permissions
- os.chmod(self._configfile, PERMISSIONS)
+ config.SMTPPORT
+
+ def setUp(self):
+ TestBase.setUp(self)
# Second argument is ignored.
self._server = SinkServer(('localhost', TESTPORT), None)
- os.system('bin/mailmanctl -C %s -q start' % self._configfile)
- # Don't call our superclass's setUp until the above succeeds,
- # otherwise, should it fail, we'll be left with a stale _xtest list
- # which would have to be manually removed. unittest doesn't call
- # tearDown() for errors in setUp().
- TestBase.setUp(self)
+ try:
+ os.system('bin/mailmanctl -C %s -q start' % self._config)
+ # If any errors occur in the above, be sure to manually call
+ # tearDown(). unittest doesn't call tearDown() for errors in
+ # setUp().
+ except:
+ self.tearDown()
def tearDown(self):
- os.system('bin/mailmanctl -C %s -q stop' % self._configfile)
+ os.system('bin/mailmanctl -C %s -q stop' % self._config)
self._server.close()
TestBase.tearDown(self)
- os.remove(self._configfile)
+ os.remove(self._config)
def _readmsg(self):
global MSGTEXT
diff --git a/Mailman/testing/test_handlers.py b/Mailman/testing/test_handlers.py
index 630d08286..1c38daa8b 100644
--- a/Mailman/testing/test_handlers.py
+++ b/Mailman/testing/test_handlers.py
@@ -68,7 +68,7 @@ class TestAcknowledge(TestBase):
# We're going to want to inspect this queue directory
self._sb = Switchboard(config.VIRGINQUEUE_DIR)
# Add a member
- self._mlist.addNewMember('aperson@dom.ain')
+ self._mlist.addNewMember('aperson@example.org')
self._mlist.personalize = False
def tearDown(self):
@@ -81,11 +81,11 @@ class TestAcknowledge(TestBase):
# Make sure there are no files in the virgin queue already
eq(len(self._sb.files()), 0)
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
Acknowledge.process(self._mlist, msg,
- {'original_sender': 'aperson@dom.ain'})
+ {'original_sender': 'aperson@example.org'})
eq(len(self._sb.files()), 0)
def test_no_ack_not_a_member(self):
@@ -93,18 +93,18 @@ From: aperson@dom.ain
# Make sure there are no files in the virgin queue already
eq(len(self._sb.files()), 0)
msg = email.message_from_string("""\
-From: bperson@dom.ain
+From: bperson@example.com
""", Message.Message)
Acknowledge.process(self._mlist, msg,
- {'original_sender': 'bperson@dom.ain'})
+ {'original_sender': 'bperson@example.com'})
eq(len(self._sb.files()), 0)
def test_no_ack_sender(self):
eq = self.assertEqual
eq(len(self._sb.files()), 0)
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
Acknowledge.process(self._mlist, msg, {})
@@ -113,10 +113,10 @@ From: aperson@dom.ain
def test_ack_no_subject(self):
eq = self.assertEqual
self._mlist.setMemberOption(
- 'aperson@dom.ain', config.AcknowledgePosts, 1)
+ 'aperson@example.org', config.AcknowledgePosts, 1)
eq(len(self._sb.files()), 0)
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
Acknowledge.process(self._mlist, msg, {})
@@ -124,18 +124,18 @@ From: aperson@dom.ain
eq(len(files), 1)
qmsg, qdata = self._sb.dequeue(files[0])
# Check the .db file
- eq(qdata.get('listname'), '_xtest')
- eq(qdata.get('recips'), ['aperson@dom.ain'])
+ eq(qdata.get('listname'), '_xtest@example.com')
+ eq(qdata.get('recips'), ['aperson@example.org'])
eq(qdata.get('version'), 3)
# Check the .pck
eq(str(str(qmsg['subject'])), '_xtest post acknowledgement')
- eq(qmsg['to'], 'aperson@dom.ain')
- eq(qmsg['from'], '_xtest-bounces@dom.ain')
+ eq(qmsg['to'], 'aperson@example.org')
+ eq(qmsg['from'], '_xtest-bounces@example.com')
eq(qmsg.get_type(), 'text/plain')
eq(qmsg.get_param('charset'), 'us-ascii')
msgid = qmsg['message-id']
self.failUnless(msgid.startswith('<mailman.'))
- self.failUnless(msgid.endswith('._xtest@dom.ain>'))
+ self.failUnless(msgid.endswith('._xtest@example.com>'))
eq(qmsg.get_payload(), """\
Your message entitled
@@ -143,8 +143,8 @@ Your message entitled
was successfully received by the _xtest mailing list.
-List info page: http://www.dom.ain/mailman/listinfo/_xtest
-Your preferences: http://www.dom.ain/mailman/options/_xtest/aperson%40dom.ain
+List info page: http://www.example.com/mailman/listinfo/_xtest
+Your preferences: http://www.example.com/mailman/options/_xtest/aperson%40example.org
""")
# Make sure we dequeued the only message
eq(len(self._sb.files()), 0)
@@ -152,10 +152,10 @@ Your preferences: http://www.dom.ain/mailman/options/_xtest/aperson%40dom.ain
def test_ack_with_subject(self):
eq = self.assertEqual
self._mlist.setMemberOption(
- 'aperson@dom.ain', config.AcknowledgePosts, 1)
+ 'aperson@example.org', config.AcknowledgePosts, 1)
eq(len(self._sb.files()), 0)
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: Wish you were here
""", Message.Message)
@@ -164,18 +164,18 @@ Subject: Wish you were here
eq(len(files), 1)
qmsg, qdata = self._sb.dequeue(files[0])
# Check the .db file
- eq(qdata.get('listname'), '_xtest')
- eq(qdata.get('recips'), ['aperson@dom.ain'])
+ eq(qdata.get('listname'), '_xtest@example.com')
+ eq(qdata.get('recips'), ['aperson@example.org'])
eq(qdata.get('version'), 3)
# Check the .pck
eq(str(qmsg['subject']), '_xtest post acknowledgement')
- eq(qmsg['to'], 'aperson@dom.ain')
- eq(qmsg['from'], '_xtest-bounces@dom.ain')
+ eq(qmsg['to'], 'aperson@example.org')
+ eq(qmsg['from'], '_xtest-bounces@example.com')
eq(qmsg.get_type(), 'text/plain')
eq(qmsg.get_param('charset'), 'us-ascii')
msgid = qmsg['message-id']
self.failUnless(msgid.startswith('<mailman.'))
- self.failUnless(msgid.endswith('._xtest@dom.ain>'))
+ self.failUnless(msgid.endswith('._xtest@example.com>'))
eq(qmsg.get_payload(), """\
Your message entitled
@@ -183,8 +183,8 @@ Your message entitled
was successfully received by the _xtest mailing list.
-List info page: http://www.dom.ain/mailman/listinfo/_xtest
-Your preferences: http://www.dom.ain/mailman/options/_xtest/aperson%40dom.ain
+List info page: http://www.example.com/mailman/listinfo/_xtest
+Your preferences: http://www.example.com/mailman/options/_xtest/aperson%40example.org
""")
# Make sure we dequeued the only message
eq(len(self._sb.files()), 0)
@@ -284,13 +284,13 @@ class TestCalcRecips(TestBase):
TestBase.setUp(self)
# Add a bunch of regular members
mlist = self._mlist
- mlist.addNewMember('aperson@dom.ain')
- mlist.addNewMember('bperson@dom.ain')
- mlist.addNewMember('cperson@dom.ain')
+ mlist.addNewMember('aperson@example.org')
+ mlist.addNewMember('bperson@example.com')
+ mlist.addNewMember('cperson@example.com')
# And a bunch of digest members
- mlist.addNewMember('dperson@dom.ain', digest=1)
- mlist.addNewMember('eperson@dom.ain', digest=1)
- mlist.addNewMember('fperson@dom.ain', digest=1)
+ mlist.addNewMember('dperson@example.com', digest=1)
+ mlist.addNewMember('eperson@example.com', digest=1)
+ mlist.addNewMember('fperson@example.com', digest=1)
def test_short_circuit(self):
msgdata = {'recips': 1}
@@ -301,35 +301,35 @@ class TestCalcRecips(TestBase):
def test_simple_path(self):
msgdata = {}
msg = email.message_from_string("""\
-From: dperson@dom.ain
+From: dperson@example.com
""", Message.Message)
CalcRecips.process(self._mlist, msg, msgdata)
self.failUnless(msgdata.has_key('recips'))
recips = msgdata['recips']
recips.sort()
- self.assertEqual(recips, ['aperson@dom.ain', 'bperson@dom.ain',
- 'cperson@dom.ain'])
+ self.assertEqual(recips, ['aperson@example.org', 'bperson@example.com',
+ 'cperson@example.com'])
def test_exclude_sender(self):
msgdata = {}
msg = email.message_from_string("""\
-From: cperson@dom.ain
+From: cperson@example.com
""", Message.Message)
- self._mlist.setMemberOption('cperson@dom.ain',
+ self._mlist.setMemberOption('cperson@example.com',
config.DontReceiveOwnPosts, 1)
CalcRecips.process(self._mlist, msg, msgdata)
self.failUnless(msgdata.has_key('recips'))
recips = msgdata['recips']
recips.sort()
- self.assertEqual(recips, ['aperson@dom.ain', 'bperson@dom.ain'])
+ self.assertEqual(recips, ['aperson@example.org', 'bperson@example.com'])
def test_urgent_moderator(self):
self._mlist.mod_password = password('xxXXxx')
msgdata = {}
msg = email.message_from_string("""\
-From: dperson@dom.ain
+From: dperson@example.com
Urgent: xxXXxx
""", Message.Message)
@@ -337,16 +337,16 @@ Urgent: xxXXxx
self.failUnless(msgdata.has_key('recips'))
recips = msgdata['recips']
recips.sort()
- self.assertEqual(recips, ['aperson@dom.ain', 'bperson@dom.ain',
- 'cperson@dom.ain', 'dperson@dom.ain',
- 'eperson@dom.ain', 'fperson@dom.ain'])
+ self.assertEqual(recips, ['aperson@example.org', 'bperson@example.com',
+ 'cperson@example.com', 'dperson@example.com',
+ 'eperson@example.com', 'fperson@example.com'])
def test_urgent_admin(self):
self._mlist.mod_password = password('yyYYyy')
self._mlist.password = password('xxXXxx')
msgdata = {}
msg = email.message_from_string("""\
-From: dperson@dom.ain
+From: dperson@example.com
Urgent: xxXXxx
""", Message.Message)
@@ -354,16 +354,16 @@ Urgent: xxXXxx
self.failUnless(msgdata.has_key('recips'))
recips = msgdata['recips']
recips.sort()
- self.assertEqual(recips, ['aperson@dom.ain', 'bperson@dom.ain',
- 'cperson@dom.ain', 'dperson@dom.ain',
- 'eperson@dom.ain', 'fperson@dom.ain'])
+ self.assertEqual(recips, ['aperson@example.org', 'bperson@example.com',
+ 'cperson@example.com', 'dperson@example.com',
+ 'eperson@example.com', 'fperson@example.com'])
def test_urgent_reject(self):
self._mlist.mod_password = password('yyYYyy')
self._mlist.password = password('xxXXxx')
msgdata = {}
msg = email.message_from_string("""\
-From: dperson@dom.ain
+From: dperson@example.com
Urgent: zzZZzz
""", Message.Message)
@@ -382,15 +382,15 @@ class TestCleanse(TestBase):
def test_simple_cleanse(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Approved: yes
Urgent: indeed
-Reply-To: bperson@dom.ain
-Sender: asystem@dom.ain
-Return-Receipt-To: another@dom.ain
-Disposition-Notification-To: athird@dom.ain
-X-Confirm-Reading-To: afourth@dom.ain
-X-PMRQC: afifth@dom.ain
+Reply-To: bperson@example.com
+Sender: asystem@example.com
+Return-Receipt-To: another@example.com
+Disposition-Notification-To: athird@example.com
+X-Confirm-Reading-To: afourth@example.com
+X-PMRQC: afifth@example.com
Subject: a message to you
""", Message.Message)
@@ -401,23 +401,23 @@ Subject: a message to you
eq(msg['disposition-notification-to'], None)
eq(msg['x-confirm-reading-to'], None)
eq(msg['x-pmrqc'], None)
- eq(msg['from'], 'aperson@dom.ain')
- eq(msg['reply-to'], 'bperson@dom.ain')
- eq(msg['sender'], 'asystem@dom.ain')
+ eq(msg['from'], 'aperson@example.org')
+ eq(msg['reply-to'], 'bperson@example.com')
+ eq(msg['sender'], 'asystem@example.com')
eq(msg['subject'], 'a message to you')
def test_anon_cleanse(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Approved: yes
Urgent: indeed
-Reply-To: bperson@dom.ain
-Sender: asystem@dom.ain
-Return-Receipt-To: another@dom.ain
-Disposition-Notification-To: athird@dom.ain
-X-Confirm-Reading-To: afourth@dom.ain
-X-PMRQC: afifth@dom.ain
+Reply-To: bperson@example.com
+Sender: asystem@example.com
+Return-Receipt-To: another@example.com
+Disposition-Notification-To: athird@example.com
+X-Confirm-Reading-To: afourth@example.com
+X-PMRQC: afifth@example.com
Subject: a message to you
""", Message.Message)
@@ -431,8 +431,8 @@ Subject: a message to you
eq(msg['x-pmrqc'], None)
eq(len(msg.get_all('from')), 1)
eq(len(msg.get_all('reply-to')), 1)
- eq(msg['from'], '_xtest@dom.ain')
- eq(msg['reply-to'], '_xtest@dom.ain')
+ eq(msg['from'], '_xtest@example.com')
+ eq(msg['reply-to'], '_xtest@example.com')
eq(msg['sender'], None)
eq(msg['subject'], 'a message to you')
@@ -451,12 +451,12 @@ X-Ack: yes
def test_original_sender(self):
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
msgdata = {}
CookHeaders.process(self._mlist, msg, msgdata)
- self.assertEqual(msgdata.get('original_sender'), 'aperson@dom.ain')
+ self.assertEqual(msgdata.get('original_sender'), 'aperson@example.org')
def test_no_original_sender(self):
msg = email.message_from_string("""\
@@ -469,29 +469,29 @@ Subject: about this message
def test_xbeenthere(self):
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(self._mlist, msg, {})
- self.assertEqual(msg['x-beenthere'], '_xtest@dom.ain')
+ self.assertEqual(msg['x-beenthere'], '_xtest@example.com')
def test_multiple_xbeentheres(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
-X-BeenThere: alist@another.dom.ain
+From: aperson@example.org
+X-BeenThere: alist@another.example.com
""", Message.Message)
CookHeaders.process(self._mlist, msg, {})
eq(len(msg.get_all('x-beenthere')), 2)
beentheres = msg.get_all('x-beenthere')
beentheres.sort()
- eq(beentheres, ['_xtest@dom.ain', 'alist@another.dom.ain'])
+ eq(beentheres, ['_xtest@example.com', 'alist@another.example.com'])
def test_nonexisting_mmversion(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(self._mlist, msg, {})
@@ -500,7 +500,7 @@ From: aperson@dom.ain
def test_existing_mmversion(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
X-Mailman-Version: 3000
""", Message.Message)
@@ -511,7 +511,7 @@ X-Mailman-Version: 3000
def test_nonexisting_precedence(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(self._mlist, msg, {})
@@ -520,7 +520,7 @@ From: aperson@dom.ain
def test_existing_precedence(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Precedence: junk
""", Message.Message)
@@ -531,7 +531,7 @@ Precedence: junk
def test_subject_munging_no_subject(self):
self._mlist.subject_prefix = '[XTEST] '
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
msgdata = {}
@@ -542,7 +542,7 @@ From: aperson@dom.ain
def test_subject_munging(self):
self._mlist.subject_prefix = '[XTEST] '
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: About Mailman...
""", Message.Message)
@@ -552,7 +552,7 @@ Subject: About Mailman...
def test_no_subject_munging_for_digests(self):
self._mlist.subject_prefix = '[XTEST] '
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: About Mailman...
""", Message.Message)
@@ -562,7 +562,7 @@ Subject: About Mailman...
def test_no_subject_munging_for_fasttrack(self):
self._mlist.subject_prefix = '[XTEST] '
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: About Mailman...
""", Message.Message)
@@ -572,7 +572,7 @@ Subject: About Mailman...
def test_no_subject_munging_has_prefix(self):
self._mlist.subject_prefix = '[XTEST] '
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: Re: [XTEST] About Mailman...
""", Message.Message)
@@ -584,12 +584,12 @@ Subject: Re: [XTEST] About Mailman...
mlist = self._mlist
mlist.reply_goes_to_list = 1
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(mlist, msg, {})
- eq(msg['reply-to'], '_xtest@dom.ain')
- eq(msg.get_all('reply-to'), ['_xtest@dom.ain'])
+ eq(msg['reply-to'], '_xtest@example.com')
+ eq(msg.get_all('reply-to'), ['_xtest@example.com'])
def test_reply_to_list_with_strip(self):
eq = self.assertEqual
@@ -597,41 +597,41 @@ From: aperson@dom.ain
mlist.reply_goes_to_list = 1
mlist.first_strip_reply_to = 1
msg = email.message_from_string("""\
-From: aperson@dom.ain
-Reply-To: bperson@dom.ain
+From: aperson@example.org
+Reply-To: bperson@example.com
""", Message.Message)
CookHeaders.process(mlist, msg, {})
- eq(msg['reply-to'], '_xtest@dom.ain')
- eq(msg.get_all('reply-to'), ['_xtest@dom.ain'])
+ eq(msg['reply-to'], '_xtest@example.com')
+ eq(msg.get_all('reply-to'), ['_xtest@example.com'])
def test_reply_to_explicit(self):
eq = self.assertEqual
mlist = self._mlist
mlist.reply_goes_to_list = 2
- mlist.reply_to_address = 'mlist@dom.ain'
+ mlist.reply_to_address = 'mlist@example.com'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(mlist, msg, {})
- eq(msg['reply-to'], 'mlist@dom.ain')
- eq(msg.get_all('reply-to'), ['mlist@dom.ain'])
+ eq(msg['reply-to'], 'mlist@example.com')
+ eq(msg.get_all('reply-to'), ['mlist@example.com'])
def test_reply_to_explicit_with_strip(self):
eq = self.assertEqual
mlist = self._mlist
mlist.reply_goes_to_list = 2
mlist.first_strip_reply_to = 1
- mlist.reply_to_address = 'mlist@dom.ain'
+ mlist.reply_to_address = 'mlist@example.com'
msg = email.message_from_string("""\
-From: aperson@dom.ain
-Reply-To: bperson@dom.ain
+From: aperson@example.org
+Reply-To: bperson@example.com
""", Message.Message)
CookHeaders.process(self._mlist, msg, {})
- eq(msg['reply-to'], 'mlist@dom.ain')
- eq(msg.get_all('reply-to'), ['mlist@dom.ain'])
+ eq(msg['reply-to'], 'mlist@example.com')
+ eq(msg.get_all('reply-to'), ['mlist@example.com'])
def test_reply_to_extends_to_list(self):
eq = self.assertEqual
@@ -639,31 +639,31 @@ Reply-To: bperson@dom.ain
mlist.reply_goes_to_list = 1
mlist.first_strip_reply_to = 0
msg = email.message_from_string("""\
-From: aperson@dom.ain
-Reply-To: bperson@dom.ain
+From: aperson@example.org
+Reply-To: bperson@example.com
""", Message.Message)
CookHeaders.process(mlist, msg, {})
- eq(msg['reply-to'], 'bperson@dom.ain, _xtest@dom.ain')
+ eq(msg['reply-to'], 'bperson@example.com, _xtest@example.com')
def test_reply_to_extends_to_explicit(self):
eq = self.assertEqual
mlist = self._mlist
mlist.reply_goes_to_list = 2
mlist.first_strip_reply_to = 0
- mlist.reply_to_address = 'mlist@dom.ain'
+ mlist.reply_to_address = 'mlist@example.com'
msg = email.message_from_string("""\
-From: aperson@dom.ain
-Reply-To: bperson@dom.ain
+From: aperson@example.org
+Reply-To: bperson@example.com
""", Message.Message)
CookHeaders.process(mlist, msg, {})
- eq(msg['reply-to'], 'mlist@dom.ain, bperson@dom.ain')
+ eq(msg['reply-to'], 'mlist@example.com, bperson@example.com')
def test_list_headers_nolist(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(self._mlist, msg, {'_nolist': 1})
@@ -678,44 +678,44 @@ From: aperson@dom.ain
eq = self.assertEqual
self._mlist.archive = 1
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
oldval = config.DEFAULT_URL_HOST
- config.DEFAULT_URL_HOST = 'www.dom.ain'
+ config.DEFAULT_URL_HOST = 'www.example.com'
try:
CookHeaders.process(self._mlist, msg, {})
finally:
config.DEFAULT_URL_HOST = oldval
- eq(msg['list-id'], '<_xtest.dom.ain>')
- eq(msg['list-help'], '<mailto:_xtest-request@dom.ain?subject=help>')
+ eq(msg['list-id'], '<_xtest.example.com>')
+ eq(msg['list-help'], '<mailto:_xtest-request@example.com?subject=help>')
eq(msg['list-unsubscribe'],
- '<http://www.dom.ain/mailman/listinfo/_xtest>,'
- '\n\t<mailto:_xtest-request@dom.ain?subject=unsubscribe>')
+ '<http://www.example.com/mailman/listinfo/_xtest>,'
+ '\n\t<mailto:_xtest-request@example.com?subject=unsubscribe>')
eq(msg['list-subscribe'],
- '<http://www.dom.ain/mailman/listinfo/_xtest>,'
- '\n\t<mailto:_xtest-request@dom.ain?subject=subscribe>')
- eq(msg['list-post'], '<mailto:_xtest@dom.ain>')
- eq(msg['list-archive'], '<http://www.dom.ain/pipermail/_xtest>')
+ '<http://www.example.com/mailman/listinfo/_xtest>,'
+ '\n\t<mailto:_xtest-request@example.com?subject=subscribe>')
+ eq(msg['list-post'], '<mailto:_xtest@example.com>')
+ eq(msg['list-archive'], '<http://www.example.com/pipermail/_xtest>')
def test_list_headers_with_description(self):
eq = self.assertEqual
self._mlist.archive = 1
self._mlist.description = 'A Test List'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
CookHeaders.process(self._mlist, msg, {})
- eq(unicode(msg['list-id']), u'A Test List <_xtest.dom.ain>')
- eq(msg['list-help'], '<mailto:_xtest-request@dom.ain?subject=help>')
+ eq(unicode(msg['list-id']), u'A Test List <_xtest.example.com>')
+ eq(msg['list-help'], '<mailto:_xtest-request@example.com?subject=help>')
eq(msg['list-unsubscribe'],
- '<http://www.dom.ain/mailman/listinfo/_xtest>,'
- '\n\t<mailto:_xtest-request@dom.ain?subject=unsubscribe>')
+ '<http://www.example.com/mailman/listinfo/_xtest>,'
+ '\n\t<mailto:_xtest-request@example.com?subject=unsubscribe>')
eq(msg['list-subscribe'],
- '<http://www.dom.ain/mailman/listinfo/_xtest>,'
- '\n\t<mailto:_xtest-request@dom.ain?subject=subscribe>')
- eq(msg['list-post'], '<mailto:_xtest@dom.ain>')
+ '<http://www.example.com/mailman/listinfo/_xtest>,'
+ '\n\t<mailto:_xtest-request@example.com?subject=subscribe>')
+ eq(msg['list-post'], '<mailto:_xtest@example.com>')
@@ -731,7 +731,7 @@ class TestDecorate(TestBase):
mlist.msg_header = 'header\n'
mlist.msg_footer = 'footer'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Here is a message.
""")
@@ -747,7 +747,7 @@ footer""")
mlist.msg_footer = '%(real_name)s footer'
mlist.real_name = 'XTest'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Here is a message.
""")
@@ -763,7 +763,7 @@ XTest footer""")
mlist.msg_footer = '%(real_name) footer'
mlist.real_name = 'XTest'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Here is a message.
""")
@@ -780,7 +780,7 @@ Here is a message.
mlist.msg_footer = '%(real_name)p footer'
mlist.real_name = 'XTest'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Here is a message.
""")
@@ -795,7 +795,7 @@ Here is a message.
mlist.msg_header = '%(spooge)s header\n'
mlist.msg_footer = '%(spooge)s footer'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Here is a message.
""")
@@ -811,12 +811,12 @@ Here is a message.
mlist.msg_header = 'header'
mlist.msg_footer = 'footer'
msg1 = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Here is the first message.
""")
msg2 = email.message_from_string("""\
-From: bperson@dom.ain
+From: bperson@example.com
Here is the second message.
""")
@@ -838,12 +838,12 @@ Content-Disposition: inline
header
--BOUNDARY
-From: aperson@dom.ain
+From: aperson@example.org
Here is the first message.
--BOUNDARY
-From: bperson@dom.ain
+From: bperson@example.com
Here is the second message.
@@ -862,7 +862,7 @@ footer
mlist.msg_header = 'header\n'
mlist.msg_footer = 'footer'
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-type: image/x-spooge
IMAGEDATAIMAGEDATAIMAGEDATA
@@ -897,13 +897,13 @@ class TestFileRecips(TestBase):
def test_file_exists_no_sender(self):
msg = email.message_from_string("""\
-To: yall@dom.ain
+To: yall@example.com
""", Message.Message)
msgdata = {}
file = os.path.join(self._mlist.fullpath(), 'members.txt')
- addrs = ['aperson@dom.ain', 'bperson@dom.ain',
- 'cperson@dom.ain', 'dperson@dom.ain']
+ addrs = ['aperson@example.org', 'bperson@example.com',
+ 'cperson@example.com', 'dperson@example.com']
fp = open(file, 'w')
try:
for addr in addrs:
@@ -919,14 +919,14 @@ To: yall@dom.ain
def test_file_exists_no_member(self):
msg = email.message_from_string("""\
-From: eperson@dom.ain
-To: yall@dom.ain
+From: eperson@example.com
+To: yall@example.com
""", Message.Message)
msgdata = {}
file = os.path.join(self._mlist.fullpath(), 'members.txt')
- addrs = ['aperson@dom.ain', 'bperson@dom.ain',
- 'cperson@dom.ain', 'dperson@dom.ain']
+ addrs = ['aperson@example.org', 'bperson@example.com',
+ 'cperson@example.com', 'dperson@example.com']
fp = open(file, 'w')
try:
for addr in addrs:
@@ -942,14 +942,14 @@ To: yall@dom.ain
def test_file_exists_is_member(self):
msg = email.message_from_string("""\
-From: aperson@dom.ain
-To: yall@dom.ain
+From: aperson@example.org
+To: yall@example.com
""", Message.Message)
msgdata = {}
file = os.path.join(self._mlist.fullpath(), 'members.txt')
- addrs = ['aperson@dom.ain', 'bperson@dom.ain',
- 'cperson@dom.ain', 'dperson@dom.ain']
+ addrs = ['aperson@example.org', 'bperson@example.com',
+ 'cperson@example.com', 'dperson@example.com']
fp = open(file, 'w')
try:
for addr in addrs:
@@ -995,7 +995,7 @@ class TestHold(TestBase):
def test_administrivia(self):
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: unsubscribe
""", Message.Message)
@@ -1005,11 +1005,11 @@ Subject: unsubscribe
def test_max_recips(self):
self._mlist.max_num_recipients = 5
msg = email.message_from_string("""\
-From: aperson@dom.ain
-To: _xtest@dom.ain, bperson@dom.ain
-Cc: cperson@dom.ain
-Cc: dperson@dom.ain (Jimmy D. Person)
-To: Billy E. Person <eperson@dom.ain>
+From: aperson@example.org
+To: _xtest@example.com, bperson@example.com
+Cc: cperson@example.com
+Cc: dperson@example.com (Jimmy D. Person)
+To: Billy E. Person <eperson@example.com>
Hey folks!
""", Message.Message)
@@ -1019,7 +1019,7 @@ Hey folks!
def test_implicit_destination(self):
self._mlist.require_explicit_destination = 1
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: An implicit message
""", Message.Message)
@@ -1029,7 +1029,7 @@ Subject: An implicit message
def test_implicit_destination_fromusenet(self):
self._mlist.require_explicit_destination = 1
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Subject: An implicit message
""", Message.Message)
@@ -1037,10 +1037,10 @@ Subject: An implicit message
self.assertEqual(rtn, None)
def test_suspicious_header(self):
- self._mlist.bounce_matching_headers = 'From: .*person@(blah.)?dom.ain'
+ self._mlist.bounce_matching_headers = 'From: .*person@(blah.)?example.org'
msg = email.message_from_string("""\
-From: aperson@dom.ain
-To: _xtest@dom.ain
+From: aperson@example.org
+To: _xtest@example.net
Subject: An implicit message
""", Message.Message)
@@ -1048,10 +1048,10 @@ Subject: An implicit message
self._mlist, msg, {})
def test_suspicious_header_ok(self):
- self._mlist.bounce_matching_headers = 'From: .*person@blah.dom.ain'
+ self._mlist.bounce_matching_headers = 'From: .*person@blah.example.com'
msg = email.message_from_string("""\
-From: aperson@dom.ain
-To: _xtest@dom.ain
+From: aperson@example.org
+To: _xtest@example.com
Subject: An implicit message
""", Message.Message)
@@ -1061,8 +1061,8 @@ Subject: An implicit message
def test_max_message_size(self):
self._mlist.max_message_size = 1
msg = email.message_from_string("""\
-From: aperson@dom.ain
-To: _xtest@dom.ain
+From: aperson@example.org
+To: _xtest@example.com
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
@@ -1088,7 +1088,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
self._mlist.admin_immed_notify = 1
# Now cause an implicit destination hold
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
""", Message.Message)
self.assertRaises(Hold.ImplicitDestination, Hold.process,
@@ -1106,9 +1106,9 @@ From: aperson@dom.ain
# messages or the metadata files...
keys = qfiles.keys()
keys.sort()
- eq(keys, ['_xtest-owner@dom.ain', 'aperson@dom.ain'])
+ eq(keys, ['_xtest-owner@example.com', 'aperson@example.org'])
# Get the pending cookie from the message to the sender
- pmsg, pdata = qfiles['aperson@dom.ain']
+ pmsg, pdata = qfiles['aperson@example.org']
confirmlines = pmsg.get_payload().split('\n')
cookie = confirmlines[-3].split('/')[-1]
# We also need to make sure there's an entry in the Pending database
@@ -1134,7 +1134,7 @@ class TestMimeDel(TestBase):
def test_outer_matches(self):
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-Type: image/jpeg
MIME-Version: 1.0
@@ -1146,7 +1146,7 @@ xxxxx
def test_strain_multipart(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-Type: multipart/mixed; boundary=BOUNDARY
MIME-Version: 1.0
@@ -1172,7 +1172,7 @@ yyy
def test_collapse_multipart_alternative(self):
eq = self.assertEqual
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-Type: multipart/mixed; boundary=BOUNDARY
MIME-Version: 1.0
@@ -1209,7 +1209,7 @@ yyy
program = config.HTML_TO_PLAIN_TEXT_COMMAND.split()[0]
if os.path.isfile(program):
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-Type: text/html
MIME-Version: 1.0
@@ -1224,7 +1224,7 @@ MIME-Version: 1.0
eq = self.assertEqual
self._mlist.filter_mime_types.append('text/html')
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-Type: multipart/mixed; boundary=AAA
--AAA
@@ -1279,7 +1279,7 @@ aaa
eq = self.assertEqual
self._mlist.filter_mime_types.append('text/html')
msg = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
Content-Type: multipart/alternative; boundary=AAA
--AAA
@@ -1317,12 +1317,12 @@ class TestSpamDetect(TestBase):
def test_spam_detect(self):
msg1 = email.message_from_string("""\
-From: aperson@dom.ain
+From: aperson@example.org
A message.
""")
msg2 = email.message_from_string("""\
-To: xlist@dom.ain
+To: xlist@example.com
A message.
""")
@@ -1510,8 +1510,8 @@ It rocks!
class TestToDigest(TestBase):
def _makemsg(self, i=0):
- msg = email.message_from_string("""From: aperson@dom.ain
-To: _xtest@dom.ain
+ msg = email.message_from_string("""From: aperson@example.org
+To: _xtest@example.com
Subject: message number %(i)d
Here is message %(i)d
@@ -1621,7 +1621,7 @@ It rocks!
eq(data['foo'], 1)
eq(data['bar'], 2)
eq(data['version'], 3)
- eq(data['listname'], '_xtest')
+ eq(data['listname'], '_xtest@example.com')
eq(data['verp'], 1)
# Clock skew makes this unreliable
#self.failUnless(data['received_time'] <= time.time())
@@ -1670,7 +1670,7 @@ Mailman rocks!
msg2, data = self._sb.dequeue(files[0])
eq(msg.as_string(unixfrom=0), msg2.as_string(unixfrom=0))
eq(data['version'], 3)
- eq(data['listname'], '_xtest')
+ eq(data['listname'], '_xtest@example.com')
# Clock skew makes this unreliable
#self.failUnless(data['received_time'] <= time.time())
diff --git a/Mailman/testing/test_message.py b/Mailman/testing/test_message.py
index 504adfc9e..822449064 100644
--- a/Mailman/testing/test_message.py
+++ b/Mailman/testing/test_message.py
@@ -32,43 +32,44 @@ class TestSentMessage(EmailBase):
eq = self.assertEqual
unless = self.failUnless
msg = Message.UserNotification(
- 'aperson@dom.ain',
- '_xtest@dom.ain',
+ 'aperson@example.org',
+ '_xtest@example.com',
'Your Test List',
'About your test list')
msg.send(self._mlist)
qmsg = email.message_from_string(self._readmsg())
eq(qmsg['subject'], 'Your Test List')
- eq(qmsg['from'], '_xtest@dom.ain')
- eq(qmsg['to'], 'aperson@dom.ain')
+ eq(qmsg['from'], '_xtest@example.com')
+ eq(qmsg['to'], 'aperson@example.org')
# The Message-ID: header has some time-variant information
msgid = qmsg['message-id']
unless(msgid.startswith('<mailman.'))
- unless(msgid.endswith('._xtest@dom.ain>'))
- eq(qmsg['sender'], '_xtest-bounces@dom.ain')
- eq(qmsg['errors-to'], '_xtest-bounces@dom.ain')
- eq(qmsg['x-beenthere'], '_xtest@dom.ain')
+ unless(msgid.endswith('._xtest@example.com>'))
+ eq(qmsg['sender'], '_xtest-bounces@example.com')
+ eq(qmsg['errors-to'], '_xtest-bounces@example.com')
+ eq(qmsg['x-beenthere'], '_xtest@example.com')
eq(qmsg['x-mailman-version'], Version.VERSION)
eq(qmsg['precedence'], 'bulk')
# UserNotifications have reduced_list_headers so it won't have
# List-Help, List-Subscribe, or List-Unsubscribe. XXX Why would that
# possibly be?
- eq(qmsg['list-help'], '<mailto:_xtest-request@dom.ain?subject=help>')
+ eq(qmsg['list-help'],
+ '<mailto:_xtest-request@example.com?subject=help>')
eq(qmsg['list-subscribe'], """\
-<http://www.dom.ain/mailman/listinfo/_xtest>,
-\t<mailto:_xtest-request@dom.ain?subject=subscribe>""")
- eq(qmsg['list-id'], '<_xtest.dom.ain>')
+<http://www.example.com/mailman/listinfo/_xtest>,
+\t<mailto:_xtest-request@example.com?subject=subscribe>""")
+ eq(qmsg['list-id'], '<_xtest.example.com>')
eq(qmsg['list-unsubscribe'], """\
-<http://www.dom.ain/mailman/listinfo/_xtest>,
-\t<mailto:_xtest-request@dom.ain?subject=unsubscribe>""")
+<http://www.example.com/mailman/listinfo/_xtest>,
+\t<mailto:_xtest-request@example.com?subject=unsubscribe>""")
eq(qmsg.get_payload(), 'About your test list')
def test_bounce_message(self):
eq = self.assertEqual
unless = self.failUnless
msg = email.message_from_string("""\
-To: _xtest@dom.ain
-From: nobody@dom.ain
+To: _xtest@example.com
+From: nobody@example.com
Subject: and another thing
yadda yadda yadda
diff --git a/misc/sitelist.cfg b/misc/sitelist.cfg
index c8ebfc1d5..e69de29bb 100644
--- a/misc/sitelist.cfg
+++ b/misc/sitelist.cfg
@@ -1,376 +0,0 @@
-## "mailman" mailing list configuration settings -*- python -*-
-## captured on Sat Mar 22 00:21:06 2003
-
-## Mailman - The GNU Mailing List Management System
-## Copyright (C) 2003 Free Software Foundation, Inc.
-## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-## General options
-#
-# Fundamental list characteristics, including descriptive info and basic
-# behaviors.
-
-# The capitalization of this name can be changed to make it presentable
-# in polite company as a proper noun, or to make an acronym part all
-# upper case, etc. However, the name will be advertised as the email
-# address (e.g., in subscribe confirmation notices), so it should not be
-# otherwise altered. (Email addresses are not case sensitive, but they
-# are sensitive to almost everything else :-)
-real_name = 'Mailman'
-
-# This description is used when the mailing list is listed with other
-# mailing lists, or in headers, and so forth. It should be as succinct
-# as you can get it, while still identifying what the list is.
-description = 'Mailman site list'
-
-# This text will be prepended to subject lines of messages posted to the
-# list, to distinguish mailing list messages in in mailbox summaries.
-# Brevity is premium here, it's ok to shorten long mailing list names to
-# something more concise, as long as it still identifies the mailing
-# list.
-subject_prefix = '[Mailman Site List] '
-
-# List moderators (and list administrators) are sent daily reminders of
-# requests pending approval, like subscriptions to a moderated list, or
-# postings that are being held for one reason or another. Setting this
-# option causes notices to be sent immediately on the arrival of new
-# requests as well.
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-admin_immed_notify = 1
-
-# Should administrator get notices of subscribes and unsubscribes?
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-admin_notify_mchanges = 1
-
-# Approval notices are sent when mail triggers certain of the limits
-# except routine list moderation and spam filters, for which notices are
-# not sent. This option overrides ever sending the notice.
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-respond_to_post_requests = 1
-
-## Nondigest options
-#
-# Policies concerning immediately delivered list traffic.
-
-# Can subscribers choose to receive mail immediately, rather than in
-# batched digests?
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-nondigestable = 1
-
-# Normally, Mailman sends the regular delivery messages to the mail
-# server in batches. This is much more efficent because it reduces the
-# amount of traffic between Mailman and the mail server.
-#
-# However, some lists can benefit from a more personalized approach. In
-# this case, Mailman crafts a new message for each member on the regular
-# delivery list. Turning this feature on may degrade the performance of
-# your site, so you need to carefully consider whether the trade-off is
-# worth it, or whether there are other ways to accomplish what you want.
-# You should also carefully monitor your system load to make sure it is
-# acceptable.
-#
-# Select No to disable personalization and send messages to the members
-# in batches. Select Yes to personalize deliveries and allow additional
-# substitution variables in message headers and footers (see below). In
-# addition, by selecting Full Personalization, the To header of posted
-# messages will be modified to include the member's address instead of
-# the list's posting address.
-#
-# When personalization is enabled, a few more expansion variables that
-# can be included in the <a href="?VARHELP=nondigest/msg_header">message
-# header and message footer.
-#
-# These additional substitution variables will be available for your
-# headers and footers, when this feature is enabled:
-#
-# user_address - The address of the user, coerced to lower case.
-# user_delivered_to - The case-preserved address that the user is
-# subscribed with. user_password - The user's password. user_name - The
-# user's full name. user_optionsurl - The url to the user's option page.
-#
-#
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-# 2 = "Full Personalization"
-personalize = 1
-
-# Text appended to the bottom of every immediately-delivery message.
-# This text can include Python format strings which are resolved against
-# list attributes. The list of substitutions allowed are:
-#
-#
-# real_name - The `pretty' name of the list; usually the list name with
-# capitalization.
-#
-# list_name - The name by which the list is identified in URLs, where
-# case is significant. (For backwards compability, _internal_name is
-# equivalent.)
-#
-# host_name - The fully qualified domain name that the list server runs
-# on.
-#
-# web_page_url - The base URL for Mailman. This can be appended with,
-# e.g. listinfo/%(internal_name)s to yield the listinfo page for the
-# mailing list.
-#
-# description - The brief description of the mailing list.
-#
-# info - The full description of the mailing list.
-#
-# cgiext - The extension added to CGI scripts.
-#
-#
-msg_footer = """_______________________________________________
-%(real_name)s site list
-%(real_name)s@%(host_name)s
-%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s"""
-
-## Digest options
-#
-# Batched-delivery digest characteristics.
-
-# Can list members choose to receive list traffic bunched in digests?
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-digestable = 0
-
-## Privacy options
-#
-# This section allows you to configure subscription and membership
-# exposure policy. You can also control whether this list is public or
-# not. See also the <a
-# href="http://www.wooz.org/mailman/admin/mailman/archive">Archival
-# Options</a> section for separate archive-related privacy settings.
-
-# Advertise this list when people ask what lists are on this machine?
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-advertised = 0
-
-# Confirm (*) - email confirmation required Require approval - require
-# list administrator approval for subscriptions Confirm and approve -
-# both confirm and approve
-#
-# (*) when someone requests a subscription, Mailman sends them a notice
-# with a unique subscription request number that they must reply to in
-# order to subscribe. This prevents mischievous (or malicious) people
-# from creating subscriptions for others without their consent.
-#
-# legal values are:
-# 1 = "Confirm"
-# 2 = "Require approval"
-# 3 = "Confirm and approve"
-subscribe_policy = 2
-
-# When members want to leave a list, they will make an unsubscription
-# request, either via the web or via email. Normally it is best for you
-# to allow open unsubscriptions so that users can easily remove
-# themselves from mailing lists (they get really upset if they can't get
-# off lists!).
-#
-# For some lists though, you may want to impose moderator approval
-# before an unsubscription request is processed. Examples of such lists
-# include a corporate mailing list that all employees are required to be
-# members of.
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-unsubscribe_policy = 0
-
-# Addresses in this list are banned outright from subscribing to this
-# mailing list, with no further moderation required. Add addresses one
-# per line; start the line with a ^ character to designate a regular
-# expression match.
-ban_list = []
-
-# When set, the list of subscribers is protected by member or admin
-# password authentication.
-#
-# legal values are:
-# 0 = "Anyone"
-# 1 = "List members"
-# 2 = "List admin only"
-private_roster = 2
-
-# Setting this option causes member email addresses to be transformed
-# when they are presented on list web pages (both in text and as links),
-# so they're not trivially recognizable as email addresses. The
-# intention is to prevent the addresses from being snarfed up by
-# automated web scanners for use by spammers.
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-obscure_addresses = 1
-
-## Privacy options
-#
-# When a message is posted to the list, a series of moderation steps are
-# take to decide whether the a moderator must first approve the message
-# or not. This section contains the controls for moderation of both
-# member and non-member postings.
-#
-# <p>Member postings are held for moderation if their <b>moderation
-# flag</b> is turned on. You can control whether member postings are
-# moderated by default or not.
-#
-# <p>Non-member postings can be automatically <a
-# href="?VARHELP=privacy/sender/accept_these_nonmembers" >accepted</a>,
-# <a href="?VARHELP=privacy/sender/hold_these_nonmembers">held for
-# moderation</a>, <a
-# href="?VARHELP=privacy/sender/reject_these_nonmembers" >rejected</a>
-# (bounced), or <a
-# href="?VARHELP=privacy/sender/discard_these_nonmembers"
-# >discarded</a>, either individually or as a group. Any posting from a
-# non-member who is not explicitly accepted, rejected, or discarded,
-# will have their posting filtered by the <a
-# href="?VARHELP=privacy/sender/generic_nonmember_action">general
-# non-member rules</a>.
-#
-# <p>In the text boxes below, add one address per line; start the line
-# with a ^ character to designate a <a href=
-# "http://www.python.org/doc/current/lib/module-re.html" >Python regular
-# expression</a>. When entering backslashes, do so as if you were using
-# Python raw strings (i.e. you generally just use a single backslash).
-#
-# <p>Note that non-regexp matches are always done first.
-
-# Each list member has a moderation flag which says whether messages
-# from the list member can be posted directly to the list, or must first
-# be approved by the list moderator. When the moderation flag is turned
-# on, list member postings must be approved first. You, the list
-# administrator can decide whether a specific individual's postings will
-# be moderated or not.
-#
-# When a new member is subscribed, their initial moderation flag takes
-# its value from this option. Turn this option off to accept member
-# postings by default. Turn this option on to, by default, moderate
-# member postings first. You can always manually set an individual
-# member's moderation bit by using the membership management screens.
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-default_member_moderation = 0
-
-# Hold -- this holds the message for approval by the list moderators.
-#
-# Reject -- this automatically rejects the message by sending a bounce
-# notice to the post's author. The text of the bounce notice can be <a
-# href="?VARHELP=privacy/sender/member_moderation_notice" >configured by
-# you.
-#
-# Discard -- this simply discards the message, with no notice sent to
-# the post's author.
-#
-#
-# legal values are:
-# 0 = "Hold"
-# 1 = "Reject"
-# 2 = "Discard"
-member_moderation_action = 1
-
-# When a post from a non-member is received, the message's sender is
-# matched against the list of explicitly <a
-# href="?VARHELP=privacy/sender/accept_these_nonmembers" >accepted,
-# held, <a href="?VARHELP=privacy/sender/reject_these_nonmembers"
-# >rejected (bounced), and <a
-# href="?VARHELP=privacy/sender/discard_these_nonmembers" >discarded
-# addresses. If no match is found, then this action is taken.
-#
-# legal values are:
-# 0 = "Accept"
-# 1 = "Hold"
-# 2 = "Reject"
-# 3 = "Discard"
-generic_nonmember_action = 2
-
-# Should messages from non-members, which are automatically discarded,
-# be forwarded to the list moderator?
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-forward_auto_discards = 1
-
-## Bounce options
-#
-# These policies control the automatic bounce processing system in
-# Mailman. Here's an overview of how it works.
-#
-# <p>When a bounce is received, Mailman tries to extract two pieces of
-# information from the message: the address of the member the message
-# was intended for, and the severity of the problem causing the bounce.
-# The severity can be either <em>hard</em> or <em>soft</em> meaning
-# either a fatal error occurred, or a transient error occurred. When in
-# doubt, a hard severity is used.
-#
-# <p>If no member address can be extracted from the bounce, then the
-# bounce is usually discarded. Otherwise, each member is assigned a
-# <em>bounce score</em> and every time we encounter a bounce from this
-# member we increment the score. Hard bounces increment by 1 while soft
-# bounces increment by 0.5. We only increment the bounce score once per
-# day, so even if we receive ten hard bounces from a member per day,
-# their score will increase by only 1 for that day.
-#
-# <p>When a member's bounce score is greater than the <a
-# href="?VARHELP=bounce/bounce_score_threshold">bounce score
-# threshold</a>, the subscription is disabled. Once disabled, the
-# member will not receive any postings from the list until their
-# membership is explicitly re-enabled (either by the list administrator
-# or the user). However, they will receive occasional reminders that
-# their membership has been disabled, and these reminders will include
-# information about how to re-enable their membership.
-#
-# <p>You can control both the <a
-# href="?VARHELP=bounce/bounce_you_are_disabled_warnings">number of
-# reminders</a> the member will receive and the <a
-# href="?VARHELP=bounce/bounce_you_are_disabled_warnings_interval"
-# >frequency</a> with which these reminders are sent.
-#
-# <p>There is one other important configuration variable; after a
-# certain period of time -- during which no bounces from the member are
-# received -- the bounce information is <a
-# href="?VARHELP=bounce/bounce_info_stale_after">considered stale</a>
-# and discarded. Thus by adjusting this value, and the score threshold,
-# you can control how quickly bouncing members are disabled. You should
-# tune both of these to the frequency and traffic volume of your list.
-
-# By setting this value to No, you disable all automatic bounce
-# processing for this list, however bounce messages will still be
-# discarded so that the list administrator isn't inundated with them.
-#
-# legal values are:
-# 0 = "No"
-# 1 = "Yes"
-bounce_processing = 1
-
-## Archive options
-#
-# List traffic archival policies.
-
-# Is archive file source for public or private archival?
-#
-# legal values are:
-# 0 = "public"
-# 1 = "private"
-archive_private = 1