------------------------------------------------------------
revno: 1168
committer: Mark Sapiro <[email protected]>
branch nick: 2.1
timestamp: Fri 2009-02-06 12:05:16 -0800
message:
Added Lindsay Haisley's courier_to_mailman.py to the contrib/ directory.
added:
contrib/README.courier_to_mailman
contrib/courier-to-mailman.py
modified:
NEWS
=== modified file 'NEWS'
--- NEWS 2009-02-06 18:36:10 +0000
+++ NEWS 2009-02-06 20:05:16 +0000
@@ -85,6 +85,10 @@
- Fixed a bug in admindb.py in the implementation of replacing "No Reason
Given" with the default rejection reason. Bug #325016.
+ Miscellaneous
+
+ - Added Lindsay Haisley's courier_to_mailman.py to the contrib directory.
+
2.1.11 (30-Jun-2008)
New Features
=== added file 'contrib/README.courier_to_mailman'
--- contrib/README.courier_to_mailman 1970-01-01 00:00:00 +0000
+++ contrib/README.courier_to_mailman 2009-02-06 20:05:16 +0000
@@ -0,0 +1,14 @@
+I've attached a utility to interface the Courier MTA with mailman for possible
+inclusion in the contrib section of the Mailman distribution. This is rather
+similar to qmail-to-mailman.py with a few changes to the code to accommodate
+differences between the the two MTAs and a number of changes to the
+instructions in the comments. This script has worked flawlessly for me for
+over 5 years, so it's been well tested.
+
+Note, of course, that a line will need to be added to configure.in (and
+configure, implicitly, via autoconf) to copy the file and replace tokens used
+in the attached script with actual paths.
+
+Courier is actively supported and development on it is ongoing, whereas qmail
+is unsupported and largely depreciated for use in new mail server
+installations.
=== added file 'contrib/courier-to-mailman.py'
--- contrib/courier-to-mailman.py 1970-01-01 00:00:00 +0000
+++ contrib/courier-to-mailman.py 2009-02-06 20:05:16 +0000
@@ -0,0 +1,125 @@
+#! /usr/bin/python
+
+# Configuration variables - Change these for your site if necessary.
+#
+MailmanHome = "@prefix@"; # Mailman home directory.
+MailmanVar = "@VAR_PREFIX@"; # Mailman directory for mutable data.
+MailmanOwner = "postmas...@localhost"; # Postmaster and abuse mail recepient.
+#
+# End of configuration variables.
+
+# courier-to-mailman.py
+#
+# Interface mailman to a Courier virtual domain. Does not require the creation
+# of _any_ list-specific aliases to connect lists to your mail system.
+#
+# Adapted March 29, 2004 by Lindsay Haisley, [email protected] from
+# qmail-to-mailman.py by Bruce Perens, [email protected], March 1999.
+#
+# This is free software under the GNU General Public License.
+#
+# This script is meant to be called from
+# <domain_home>/alias/.courier-default. It catches all mail to any address
+# at a virtual domain not otherwise handled by an explicit account or a
+# .courier file. It looks at the recepient for each mail message not
+# otherwise handled and decides if the mail is addressed to a valid list or
+# not, and bounces the message with a helpful suggestion if it's not
+# addressed to a list. It decides if it is a posting, a list command, or
+# mail to the list administrator by checking for the various address tags as
+# defined in manual Mailman list creation output (~mailman/bin/newlist). It
+# will recognize a list as soon as the list is created. Above and beyond
+# setting up a proper locally-hosted domain in Courier (the use of webadmin
+# is highly recommended!), no other configuration should be required. This
+# program recognizes mail to postmaster, mailman-owner, abuse,
+# mailer-daemon, root, and owner, and routes those mails to MailmanOwner as
+# defined in the configuration variables, above.
+#
+# INSTALLATION:
+#
+# Install this file as @prefix@/bin/courier-to-mailman.py
+#
+# To configure a virtual domain to connect to mailman, create these files:
+#
+# <domain_home>/alias/.courier-listname
+# ... containing ...
+# |/usr/bin/preline @prefix@/bin/courier-to-mailman.py
+#
+# Symlink <domain_home>/alias/.courier-listname-default to this file
+#
+# "listname" is the name of your list.
+#
+# Paths must, of course, be set correctly for the Courier and Mailman
+# installations on your system.
+#
+# Note: "preline" is a Courier program which ensures a Unix "From " header
+# is on the message. Archiving will break without this.
+
+import sys, os, re, string
+
+def main():
+ os.nice(5) # Handle mailing lists at non-interactive priority.
+
+ os.chdir(MailmanVar + "/lists")
+
+ try:
+ local = string.lower(os.environ["LOCAL"])
+ except:
+ # This might happen if we're not using qmail.
+ sys.stderr.write("LOCAL not set in environment?\n")
+ sys.exit(112)
+
+ names = ("root", "postmaster", "mailer-daemon", "mailman-owner",
"owner",
+ "abuse")
+ for i in names:
+ if i == local:
+ os.execv("/usr/bin/sendmail",
+ ("/usr/bin/sendmail", MailmanOwner))
+ sys.exit(0)
+
+ type = "post"
+ listname = string.lower(local)
+ types = (("-admin$", "admin"),
+ ("-bounces$", "bounces"),
+ ("-bounces\+.*$", "bounces"), # for VERP
+ ("-confirm$", "confirm"),
+ ("-confirm\+.*$", "confirm"),
+ ("-join$", "join"),
+ ("-leave$", "leave"),
+ ("-owner$", "owner"),
+ ("-request$", "request"),
+ ("-subscribe$", "subscribe"),
+ ("-unsubscribe$", "unsubscribe"))
+
+ for i in types:
+ if re.search(i[0],local):
+ type = i[1]
+ listname = re.sub(i[0],"",local)
+
+ if os.path.exists(listname):
+ os.execv(MailmanHome + "/mail/mailman",
+ (MailmanHome + "/mail/mailman", type,
listname))
+ else:
+ bounce()
+
+ sys.exit(111)
+
+def bounce():
+ bounce_message = """\
+TO ACCESS THE MAILING LIST SYSTEM: Start your web browser on
+http://%s/
+That web page will help you subscribe or unsubscribe, and will
+give you directions on how to post to each mailing list.\n"""
+ sys.stderr.write(bounce_message % (os.environ["HOST"]))
+ sys.exit(100)
+
+try:
+ sys.exit(main())
+except SystemExit, argument:
+ sys.exit(argument)
+
+except Exception, argument:
+ info = sys.exc_info()
+ trace = info[2]
+ sys.stderr.write("%s %s\n" % (sys.exc_type, argument))
+ sys.stderr.write("LINE %d\n" % (trace.tb_lineno))
+ sys.exit(111) # Soft failure, try again later.
--
Stable, maintained release series
https://code.launchpad.net/~mailman-coders/mailman/2.1
Your team Mailman Checkins is subscribed to branch lp:mailman/stable.
To unsubscribe from this branch go to
https://code.launchpad.net/~mailman-coders/mailman/2.1/+edit-subscription.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
http://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org