Hi,
The following script interfaces a qmail virtual domain to Mailman without the use of any aliases. That makes it a lot easier to add new lists. Could you place it in a "contrib" directory in the Mailman distribution?
Thanks
Bruce Perens
--- cut here --- #! /usr/bin/python
# Configuration variables - Change these for your site if necessary. MailmanHome = "/home/mailman"; # 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 # |/usr/bin/python /home/mailman/mail-in.py # # /var/qmail/control/virtualdomains: # DOMAIN.COM:mailman # # 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 = 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$", "mailowner"),
("-owner$", "mailowner"),
("-request$", "mailcmd"));
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/wrapper"
,(MailmanHome + "/mail/wrapper", 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.
--- cut here ---
bruce> The following script interfaces a qmail virtual domain to
bruce> Mailman without the use of any aliases. That makes it a lot
bruce> easier to add new lists. Could you place it in a "contrib"
bruce> directory in the Mailman distribution?
Thanks Bruce, I've added this to the (new) contrib directory. I made some stylistic changes:
"#! /usr/bin/env python" is the recommended #! for Python
Removed all those unnecessary semi-colons at the ends of the lines (I know, a hard habit to break :-)
Reformated for 4-space and untabified
I would also suggest rewriting the big comment near the top of the file as a docstring, but then you'd have to move this to before the setting of the config variables, and I wasn't sure if you wanted to do this.
-Barry
On 20 Mar 1999 bruce@hams.com wrote:
Hi,
The following script interfaces a qmail virtual domain to Mailman without the use of any aliases. That makes it a lot easier to add new lists. Could you place it in a "contrib" directory in the Mailman distribution?
I think it could be combined with an aliasing (put +listname:.... line to /var/qmail/users/assign) command. This way it could be in src/ and not contrib/. I'll try it at home.
Regards: Kevin (Balazs)
participants (3)
-
Balazs Nagy
-
Barry A. Warsaw
-
bruceļ¼ hams.com