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
-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