StuRa Diskussion:Server/Mail-Verteiler: Unterschied zwischen den Versionen

Aus Wiki StuRa HTW Dresden
Zur Navigation springen Zur Suche springen
 
Zeile 7: Zeile 7:
Mit Hilfe einer Pythondatei (siehe weiter unten).
Mit Hilfe einer Pythondatei (siehe weiter unten).


Jede Liste im Postfix muss in eine extra Datei (Postfixlistendatei), welche in der Postfixdatei .../postfix/main.cf unter dem Punkt <code>alias_maps</code> verwiesen wird. Dann <code>newaliases</code>, anschließend erstellt man alle Listen im Mailman und führt in der Konsole die Datei <code>/usr/local/mailman/bin/newlist</code> aus. die im Anschluß aufgelisteten Codeschnipsel werden in die richtigen "Postfixlistendateien" kopiert.
Jede Liste im Postfix muss in eine extra Datei (Postfixlistendatei), welche in der Postfixdatei .../postfix/main.cf unter dem Punkt <code>alias_maps</code> verwiesen wird. Dann <code>newaliases</code>, anschließend erstellt man alle Listen im Mailman und führt in der Konsole die Datei <code>/usr/local/mailman/bin/newlist</code> aus. die im Anschluss aufgelisteten Codeschnipsel werden in die richtigen "Postfixlistendateien" kopiert.


DATEI [http://www.gurulabs.com/downloads/postfix-to-mailman-2.1.py postfix-to-mailman-2.1.py] :
[http://www.gurulabs.com/downloads/postfix-to-mailman-2.1.py postfix-to-mailman-2.1.py]
<pre>
#! /usr/local/bin/python # vom Ersteller des Artikels geaendert


<code>
#! /usr/local/bin/python # vom Ersteller des Artikels geaendert
  # Configuration variables - Change these for your site if necessary.
  # Configuration variables - Change these for your site if necessary.
MailmanHome = "/var/mailman"; # Mailman home directory.
MailmanHome = "/var/mailman"; # Mailman home directory.
MailmanOwner = "postmaster@example.com"; # Postmaster and abuse mail recipient.
MailmanOwner = "postmaster@example.com"; # Postmaster and abuse mail recipient.
# End of configuration variables.
# End of configuration variables.
 
  # postfix-to-mailman-2.1.py (to be installed as postfix-to-mailman.py)
  # postfix-to-mailman-2.1.py (to be installed as postfix-to-mailman.py)
#
#
# Interface mailman to a postfix with a mailman transport. Does not require
# Interface mailman to a postfix with a mailman transport. Does not require
# the creation of _any_ aliases to connect lists to your mail system.
# the creation of _any_ aliases to connect lists to your mail system.
#
#
# Dax Kelson, dkelson@gurulabs.com, Sept 2002.
# Dax Kelson, dkelson@gurulabs.com, Sept 2002.
# coverted from qmail to postfix interface
# coverted from qmail to postfix interface
# Jan 2003: Fixes for Mailman 2.1
# Jan 2003: Fixes for Mailman 2.1
# Thanks to Simen E. Sandberg <senilix@gallerbyen.net>
# Thanks to Simen E. Sandberg <senilix@gallerbyen.net>
# Feb 2003: Change the suggested postfix transport to support VERP
# Feb 2003: Change the suggested postfix transport to support VERP
# Thanks to Henrique de Moraes Holschuh <henrique.holschuh@ima.sp.gov.br>
# Thanks to Henrique de Moraes Holschuh <henrique.holschuh@ima.sp.gov.br>
#
#
# This script was originally qmail-to-mailman.py by:
# This script was originally qmail-to-mailman.py by:
# Bruce Perens, bruce@perens.com, March 1999.
# Bruce Perens, bruce@perens.com, March 1999.
# This is free software under the GNU General Public License.
# This is free software under the GNU General Public License.
#
#
# This script is meant to be called from ~mailman/postfix-to-mailman.py.  
# This script is meant to be called from ~mailman/postfix-to-mailman.py.  
# It catches all mail to a virtual domain, eg "lists.example.com".
# It catches all mail to a virtual domain, eg "lists.example.com".
# It looks at the  recipient for each mail message and decides if the mail is
# It looks at the  recipient for each mail message and decides if the mail is
# addressed to a valid list or not, and bounces the message with a helpful
# 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,  
# 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
# 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
#  -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.
# 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,
# It recognizes mail to postmaster, mailman-owner, abuse, mailer-daemon, root,
# and owner, and routes those mails to MailmanOwner as defined in the
# and owner, and routes those mails to MailmanOwner as defined in the
# configuration variables, above.
# configuration variables, above.
#
#
# INSTALLATION:
# INSTALLATION:
#
#
# Install this file as ~mailman/postfix-to-mailman.py
# Install this file as ~mailman/postfix-to-mailman.py
#
#
# To configure a virtual domain to connect to mailman, edit Postfix thusly:
# To configure a virtual domain to connect to mailman, edit Postfix thusly:
#
#
# /etc/postfix/main.cf:
# /etc/postfix/main.cf:
#    relay_domains = ... lists.example.com
#    relay_domains = ... lists.example.com
#    transport_maps = hash:/etc/postfix/transport
#    transport_maps = hash:/etc/postfix/transport
#    mailman_destination_recipient_limit = 1
#    mailman_destination_recipient_limit = 1
#
#
# /etc/postfix/transport:
# /etc/postfix/transport:
#  lists.example.com  mailman:
#  lists.example.com  mailman:
#
#
# /etc/postfix/master.cf
# /etc/postfix/master.cf
#    mailman unix  -      n      n      -      -      pipe
#    mailman unix  -      n      n      -      -      pipe
#      flags=FR user=mailman:mailman  
#      flags=FR user=mailman:mailman  
#      argv=/var/mailman/postfix-to-mailman.py ${nexthop} ${user}
#      argv=/var/mailman/postfix-to-mailman.py ${nexthop} ${user}
#  
#  
#
#
# Replace list.example.com above with the name of the domain to be connected
# Replace list.example.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
# 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. Typically a virtual
# don't want to put the name of your main domain here. Typically a virtual
# domain lists.domain.com is used for Mailman, and domain.com for regular
# domain lists.domain.com is used for Mailman, and domain.com for regular
# email.
# email.
#
#
 
  import sys, os, re, string
  import sys, os, re, string
 
  def main():
  def main():
    os.nice(5)  # Handle mailing lists at non-interactive priority.
    os.nice(5)  # Handle mailing lists at non-interactive priority.
# delete this if you wish
# delete this if you wish
 
     os.chdir(MailmanHome + "/lists")
     os.chdir(MailmanHome + "/lists")
 
     try:
     try:
        local = sys.argv[2]
        local = sys.argv[2]
    except:
    except:
        # This might happen if we're not using Postfix
        # This might happen if we're not using Postfix
        sys.stderr.write("LOCAL not set?\n")
        sys.stderr.write("LOCAL not set?\n")
        sys.exit(1)
        sys.exit(1)
 
     local = string.lower(local)
     local = string.lower(local)
    local = re.sub("^mailman-","",local)
    local = re.sub("^mailman-","",local)
 
     names = ("root", "postmaster", "mailer-daemon", "mailman-owner", "owner", "abuse")
     names = ("root", "postmaster", "mailer-daemon", "mailman-owner", "owner", "abuse")
    for i in names:
    for i in names:
        if i == local:
        if i == local:
            os.execv("/usr/sbin/sendmail",
            os.execv("/usr/sbin/sendmail",
                      ("/usr/sbin/sendmail", MailmanOwner))
                    ("/usr/sbin/sendmail", MailmanOwner))
            sys.exit(0)
            sys.exit(0)
 
     type = "post"
     type = "post"
    types = (("-admin$", "admin"),
    types = (("-admin$", "admin"),
              ("-owner$", "owner"),
            ("-owner$", "owner"),
              ("-request$", "request"),
            ("-request$", "request"),
              ("-bounces$", "bounces"),
            ("-bounces$", "bounces"),
              ("-confirm$", "confirm"),
            ("-confirm$", "confirm"),
              ("-join$", "join"),
            ("-join$", "join"),
              ("-leave$", "leave"),
            ("-leave$", "leave"),
              ("-subscribe$", "subscribe"),
            ("-subscribe$", "subscribe"),
              ("-unsubscribe$", "unsubscribe"))
            ("-unsubscribe$", "unsubscribe"))
 
     for i in types:
     for i in types:
        if re.search(i[0],local):
        if re.search(i[0],local):
            type = i[1]
            type = i[1]
            local = re.sub(i[0],"",local)
            local = re.sub(i[0],"",local)
 
     if os.path.exists(local):
     if os.path.exists(local):
        os.execv(MailmanHome + "/mail/mailman",
        os.execv(MailmanHome + "/mail/mailman",
                  (MailmanHome + "/mail/mailman", type, local))
                (MailmanHome + "/mail/mailman", type, local))
    else:
    else:
          bounce()
        bounce()
    sys.exit(75)
    sys.exit(75)
 
  def bounce():
  def bounce():
    bounce_message = """\
    bounce_message = """\
TO ACCESS THE MAILING LIST SYSTEM: Start your web browser on
TO ACCESS THE MAILING LIST SYSTEM: Start your web browser on
http://%s/
http://%s/
That web page will help you subscribe or unsubscribe, and will
That web page will help you subscribe or unsubscribe, and will
give you directions on how to post to each mailing list.\n"""
give you directions on how to post to each mailing list.\n"""
    sys.stderr.write(bounce_message % (sys.argv[1]))
    sys.stderr.write(bounce_message % (sys.argv[1]))
    sys.exit(1)
    sys.exit(1)
 
  try:
  try:
    sys.exit(main())
    sys.exit(main())
except SystemExit, argument:
except SystemExit, argument:
    sys.exit(argument)
    sys.exit(argument)
 
  except Exception, argument:
  except Exception, argument:
    info = sys.exc_info()
    info = sys.exc_info()
    trace = info[2]
    trace = info[2]
    sys.stderr.write("%s %s\n" % (sys.exc_type, argument))
    sys.stderr.write("%s %s\n" % (sys.exc_type, argument))
    sys.stderr.write("Line %d\n" % (trace.tb_lineno))
    sys.stderr.write("Line %d\n" % (trace.tb_lineno))
    sys.exit(75)      # Soft failure, try again later.
    sys.exit(75)      # Soft failure, try again later.
</pre>
</code>

Version vom 2. Mai 2013, 03:16 Uhr

Problem zum Übertrag von postfix in mailman

Listen von einem bereits installierten Postfix schnell und sauber mit allen Einträgen in die Mailman-Software übertragen.

Ansatz 1 (nicht getestet)

Mit Hilfe einer Pythondatei (siehe weiter unten).

Jede Liste im Postfix muss in eine extra Datei (Postfixlistendatei), welche in der Postfixdatei .../postfix/main.cf unter dem Punkt alias_maps verwiesen wird. Dann newaliases, anschließend erstellt man alle Listen im Mailman und führt in der Konsole die Datei /usr/local/mailman/bin/newlist aus. die im Anschluss aufgelisteten Codeschnipsel werden in die richtigen "Postfixlistendateien" kopiert.

postfix-to-mailman-2.1.py

#! /usr/local/bin/python # vom Ersteller des Artikels geaendert

 # Configuration variables - Change these for your site if necessary.
MailmanHome = "/var/mailman"; # Mailman home directory.
MailmanOwner = "postmaster@example.com"; # Postmaster and abuse mail recipient.
# End of configuration variables.

 # postfix-to-mailman-2.1.py (to be installed as postfix-to-mailman.py)
#
# Interface mailman to a postfix with a mailman transport. Does not require
# the creation of _any_ aliases to connect lists to your mail system.
#
# Dax Kelson, dkelson@gurulabs.com, Sept 2002.
# coverted from qmail to postfix interface
# Jan 2003: Fixes for Mailman 2.1
# Thanks to Simen E. Sandberg <senilix@gallerbyen.net>
# Feb 2003: Change the suggested postfix transport to support VERP
# Thanks to Henrique de Moraes Holschuh <henrique.holschuh@ima.sp.gov.br>
#
# This script was originally qmail-to-mailman.py by:
# 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/postfix-to-mailman.py. 
# It catches all mail to a virtual domain, eg "lists.example.com".
# It looks at the  recipient 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/postfix-to-mailman.py
#
# To configure a virtual domain to connect to mailman, edit Postfix thusly:
#
# /etc/postfix/main.cf:
#    relay_domains = ... lists.example.com
#    transport_maps = hash:/etc/postfix/transport
#    mailman_destination_recipient_limit = 1
#
# /etc/postfix/transport:
#   lists.example.com   mailman:
#
# /etc/postfix/master.cf
#    mailman unix  -       n       n       -       -       pipe
#      flags=FR user=mailman:mailman 
#      argv=/var/mailman/postfix-to-mailman.py ${nexthop} ${user}
# 
#
# Replace list.example.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. Typically a virtual
# domain lists.domain.com is used for Mailman, and domain.com for regular
# email.
#

 import sys, os, re, string

 def main():
    os.nice(5)  # Handle mailing lists at non-interactive priority.
		 # delete this if you wish

     os.chdir(MailmanHome + "/lists")

     try:
        local = sys.argv[2]
    except:
        # This might happen if we're not using Postfix
        sys.stderr.write("LOCAL not set?\n")
        sys.exit(1)

     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("/usr/sbin/sendmail",
                     ("/usr/sbin/sendmail", MailmanOwner))
            sys.exit(0)

     type = "post"
    types = (("-admin$", "admin"),
             ("-owner$", "owner"),
             ("-request$", "request"),
             ("-bounces$", "bounces"),
             ("-confirm$", "confirm"),
             ("-join$", "join"),
             ("-leave$", "leave"),
             ("-subscribe$", "subscribe"),
             ("-unsubscribe$", "unsubscribe"))

     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(75)

 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 % (sys.argv[1]))
    sys.exit(1)

 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(75)       # Soft failure, try again later.