aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/qmail-to-mailman.py
diff options
context:
space:
mode:
author <>2003-01-02 05:25:50 +0000
committer <>2003-01-02 05:25:50 +0000
commitb132a73f15e432eaf43310fce9196ca0c0651465 (patch)
treec15f816ba7c4de99fef510e3bd75af0890d47441 /contrib/qmail-to-mailman.py
downloadmailman2-b132a73f15e432eaf43310fce9196ca0c0651465.tar.gz
mailman2-b132a73f15e432eaf43310fce9196ca0c0651465.tar.xz
mailman2-b132a73f15e432eaf43310fce9196ca0c0651465.zip
This commit was manufactured by cvs2svn to create branch
'Release_2_1-maint'.
Diffstat (limited to 'contrib/qmail-to-mailman.py')
-rw-r--r--contrib/qmail-to-mailman.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/contrib/qmail-to-mailman.py b/contrib/qmail-to-mailman.py
new file mode 100644
index 00000000..76f25225
--- /dev/null
+++ b/contrib/qmail-to-mailman.py
@@ -0,0 +1,115 @@
+#! @PYTHON@
+
+# Configuration variables - Change these for your site if necessary.
+MailmanHome = "@prefix@"; # Mailman home directory.
+MailmanOwner = "postmaster@localhost"; # Postmaster and abuse mail recepient.
+# End of configuration variables.
+
+# qmail-to-mailman.py
+#
+# Interface mailman to a qmail virtual domain. Does not require the creation
+# of _any_ aliases to connect lists to your mail system.
+#
+# Bruce Perens, bruce@perens.com, March 1999.
+# This is free software under the GNU General Public License.
+#
+# This script is meant to be called from ~mailman/.qmail-default . It catches
+# all mail to a virtual domain, in my case "lists.hams.com". It looks at the
+# recepient for each mail message 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 -admin, -owner, and
+# -request addresses. It will recognize a list as soon as the list is created,
+# there is no need to add _any_ aliases for any list. It 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 ~mailman/qmail-to-mailman.py
+#
+# To configure a virtual domain to connect to mailman, create these files:
+#
+# ~mailman/.qmail-default
+# |preline @PYTHON@ @prefix@/mail-in.py
+#
+# /var/qmail/control/virtualdomains:
+# DOMAIN.COM:mailman
+#
+# Note: "preline" is a QMail program which ensures a Unix "From " header is
+# on the message. Archiving will break without this.
+#
+# Replace DOMAIN.COM above with the name of the domain to be connected to
+# Mailman. Note that _all_ mail to that domain will go to Mailman, so you
+# don't want to put the name of your main domain here. In my case, I created
+# lists.hams.com for Mailman, and I use hams.com as my regular domain.
+#
+# After you edit /var/qmail/control/virtualdomains, kill and restart qmail.
+#
+
+import sys, os, re, string
+
+def main():
+ os.nice(5) # Handle mailing lists at non-interactive priority.
+
+ os.chdir(MailmanHome + "/lists")
+
+ try:
+ local = os.environ["LOCAL"]
+ except:
+ # This might happen if we're not using qmail.
+ sys.stderr.write("LOCAL not set in environment?\n")
+ sys.exit(100)
+
+ local = string.lower(local)
+ local = re.sub("^mailman-","",local)
+
+ names = ("root", "postmaster", "mailer-daemon", "mailman-owner", "owner",
+ "abuse")
+ for i in names:
+ if i == local:
+ os.execv("/var/qmail/bin/qmail-inject",
+ ("/var/qmail/bin/qmail-inject", MailmanOwner))
+ sys.exit(0)
+
+ type = "post"
+ types = (("-admin$", "bounces"),
+ ("-bounces$", "bounces"),
+ ("-join$", "join"),
+ ("-leave$", "leave"),
+ ("-owner$", "owner"),
+ ("-request$", "request"))
+
+ for i in types:
+ if re.search(i[0],local):
+ type = i[1]
+ local = re.sub(i[0],"",local)
+
+ if os.path.exists(local):
+ os.execv(MailmanHome + "/mail/mailman",
+ (MailmanHome + "/mail/mailman", type, local))
+ 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.