Mailing-Listen mit mailman erstellen/verwalten

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Mailinglisten mit Mailman erstellen und verwalten

Mailman (die gute Doku dazu findet ihr hier) ist ein Python Program, das eine Schnittstelle der Mailinglisten zum Mailserver (SMTP) herstellt und überdies eine browserbasierte Verwaltung zur Verfügung stellt. Zwar kann man mit Postfix selber ganz einfach Mailinglisten erstellen.
Code:
#/usr/syno/mailstation/etc/aliases
...
liste:  alice@alice.tld bob@bob.tld eve@eve.tld
und danach ein
Code:
/usr/syno/mailstation/bin/newaliases
Oder mit virtuellen Usern
Code:
#/path/to/virtual
liste@domain.tld  alice@alice.tld bob@bob.tld eve@eve.tld
und danach ein
Code:
/usr/syno/mailstation/sbin/postmap /path/to/virtual
Sowohl bei aliases als auch bei virtual am Schluss noch ein
Code:
/usr/syno/mailstation/postfix reload
Der Nachteil an beiden Versionen ist es, dass man keine Verwaltung der "Liste(n)" hat. Zudem kann jeder der die Adresse der Liste kennt an diese schreiben, auch ohne eine vorherige Authentifizierung wie sie mailman zur Verfügung stellt

Mailman
Der Einbau von mailman ist relativ unkompliziert, trotzdem kann einiges schiefgehen. Man wird sich hier mit Systemfiles auseinandersetzen müssen was immer ein Risiko birgt. Also am besten zuerst von allen Files Sicherheitskopien machen.
Bei mir ist nix zu Bruch gegangen, trotzdem geht alles was ihr macht wie immer auf Eure eigene Kappe!!


Voraussetzungen

Damit das ganze fuzen kann müssen folgende Voraussetzungen erfüllt sein
  1. Download der Sourcen von http://ftp.gnu.org/gnu/mailman/ (ich habe Version 2.1.12 verwendet)
  2. telnet Zugang oder ssh auf der DS aktiviert
  3. ipkg muss installiert sein und funktionieren
  4. python muss auf der DS installiert sein
  5. ein neuer Benutzer und Gruppe auf der DS (Benutzer muss eine Login Shell haben ggf in /etc/passwd anpassen). Im folgenden User:mailman und Gruppe:mailman
  6. ein ScripAlias von /mailman/ auf /volume1/homes/mailman/cgi-bin/ und ein Alias von /pipermail/ auf /volume1/homes/mailman/archives/public/ in der httpd.conf-user
Los geht's

Prüft zuerst ob bereits eine Python Version auf der DS installiert ist
Code:
which python
#und ggf installieren
ipkg install python26
Danach erstellt ihr am besten gleich den Benutzer und die Gruppe im DSM. Danach öffnet ihr die Datei /etc/passwd und tragt eine Login-Shell für den User ein.

Nun via telnet oder ssh auf die DS und in ein Verzeichnis für den Download von mailman wechseln. Ich habe mir dazu /volume1/tmp erstellt. Jetzt die das Archiv mit wget runterladen und entpacken z.B.
Code:
wget http://ftp.gnu.org/gnu/mailman/mailman-2.1.12.tgz
gunzip -c /volume1/tmp/mailman-2.1.12.tgz | tar xvf -
Danach noch die Rechte der neuen Daten ändern
Code:
chown -R mailman:mailman /volume1/tmp/mailman-2.1.12
Ab jetzt darf/sollte man nicht mehr root sein also ein
Code:
su mailman
Alle folgenden Codes mit $ sind als dieser User auszuführen
Code:
$ cd /volume1/tmp/mailman-2.1.12
$ ./configure --prefix=/volume1/homes/mailman --with-username=mailman --with-groupname=mailman \
--with-mailhost=EUER_SMTP_SERVER --with-urlhost=EURE_DOMAIN_ODER_SUB
$ make
$ make install
# den folgenden Befehl hingegen wieder als root!!
/volume1/homes/mailman/bin/check_perms -f
$ /volume1/homes/mailman/bin/newlist mailman
$ /volume1/homes/mailman/bin/mmsitepass PASSWORT
Der zweiletzte Befehl gibt euch eine Liste von Alias Namen aus. Kopiert diese Liste in die Zwischenablage und für sie - jetzt wieder als root - in die entsprechende Alias Datei ein
Code:
nano -w /usr/syno/mailstation/etc/aliases
<<ALIASE HINEINKOPIEREN UND DATEI SPEICHERN>>
/usr/syno/mailstation/bin/newaliases
Postfix patchen

Damit auch der Postfix mit den Maillisten arbeiten kann, müsst ihr an Postfix selber verschiedene Einstellungen machen. Zuerst definieren wir in der main.cf
Code:
relay_hosts = list.DOMAIN.ltd
transport_maps = hash:/usr/syno/mailstation/etc/transport
mailman_destination_recipient_limit = 1
und danach in /usr/syno/mailstation/etc/transport (die Datei falls nicht vorhanden anlegen)
Code:
list.DOMAIN.tld  mailman:
Und anschliessend ein
Code:
/usr/syno/mailstation/sbin/postmap /usr/syno/mailstation/etc/transport
Damit nun der Postfix weiss was er mit Emails an list.DOMAIN.tld anfangen soll gibt es sehr elegantes Python Script unter http://www.gurulabs.com/downloads/postfix-to-mailman-2.1.py. Speichert dieses Script z.B. ins Home von mailman und passt es entsprechend an.
Wichtig: Als Emailadresse keine @list.DOMAIN.tld angeben sondern nur z.B. postmaster@DOMAIN.tld
Danach öffnet ihr die Datei /usr/syno/mailstation/etc/master.cf und fügt unten
Code:
mailman unix  -       n       n       -       -       pipe
 flags=FR user=mailman:mailman argv=/volume1/homes/mailman/postfix-to-mailman.py ${nexthop} ${user}
ein.
Wichtig:In der ersten Zeile müssen alle Abstände TABS sein. Die zweite Zeile muss mit einem Leerzeichen beginnen und darf nur Leerzeichen und KEINE TABS enthalten

Nach all diesen Anpassungen muss man noch folgenden Befehl ausführen
Code:
/usr/syno/mailstation/sbin/postfix reload
Danach meldet ihr Euch wieder als mailman an und startet den mailman-Maildienst
Code:
su mailman
$ /volume1/homes/mailman/bin/mailmanctl start
Jetzt sollte mailman eigentlich laufen und im Browser unter EURE_DOMAIN_ODER_SUB aufzurufen sein u.U. müsst ihr erstnoch den Webserver restarten
Code:
/usr/syno/etc.defaults/rc.d/S97apache-user.sh restart
Gruss

tobi
 

spargel

Benutzer
Mitglied seit
15. Sep 2009
Beiträge
146
Punkte für Reaktionen
0
Punkte
16
Wow, geniale Arbeit!
War das eine Diplomarbeit? :)

DANKE und Gruss
spargel
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
Also ich habs auch mal durchgemacht und mir ist folgendes aufgefallen.

so wie du des machst, läuft es nicht. Nach dem erstellen des Benutzers muss man folgendes machen:

chmod 02775 /volume1/homes/mailman
chown mailman:mailman /volume1/homes/mailman

und natürlich darf man nicht vergessen die gruppe mailman und den nutzer mailman (der kein pw benötigt) zu erstellen

Falls mir noch was auffällt sage ich bescheid^^

Edit:
Nächster Fehler:
mailman unix - n n - - pipe
flags=FR user=mailman:mailman argv=/volume1/homes/mailman/postfix-to-mailman-2.1.py ${nexthop} ${user}

Du hast des "-2.1" vergessen

Wenn ich

su mailman
$ /volume1/homes/mailman/bin/mailmanctl start

ausführe (also ohne "$ "), dann bekomme ich den Fehler "Site list is missing mailman"
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Also ich habs auch mal durchgemacht und mir ist folgendes aufgefallen.

so wie du des machst, läuft es nicht. Nach dem erstellen des Benutzers muss man folgendes machen:

chmod 02775 /volume1/homes/mailman
chown mailman:mailman /volume1/homes/mailman

und natürlich darf man nicht vergessen die gruppe mailman und den nutzer mailman (der kein pw benötigt) zu erstellen

Falls mir noch was auffällt sage ich bescheid^^

Edit:
Nächster Fehler:
mailman unix - n n - - pipe
flags=FR user=mailman:mailman argv=/volume1/homes/mailman/postfix-to-mailman-2.1.py ${nexthop} ${user}

Du hast des "-2.1" vergessen

Wenn ich

su mailman
$ /volume1/homes/mailman/bin/mailmanctl start

ausführe (also ohne "$ "), dann bekomme ich den Fehler "Site list is missing mailman"
Also ich zitier mich mal selber
Danach erstellt ihr am besten gleich den Benutzer und die Gruppe im DSM
also scheine ich erwähnt zu haben mailman:mailman zu erstellen ;)
Zudem sollte dieser User schon ein PW haben, denn der hat eine gültige Login Shell und ein Homeverzeichnis. Ein Login via telnet oder ssh würde sonst ohne PW klappen!
Der chmod müsste unnötig sein, denn dieses Kommando
Code:
[FONT=monospace]
[/FONT]/volume1/homes/mailman/bin/check_perms -f
sollte das prüfen und allenfalls korrigieren
Zum "Fehler" bei master.cf: Woher weisst du dass ich diese Datei bei mir nicht umbenannt habe? Diese Datei heisst bei mir wirklich so, weil ich das Versions-Gedöns hinten abgeschnitten habe ;)

Der von dir genannte Fehler kommt afaik wenn die Liste mailman nicht vorhanden ist. In meinem Code wird diese jedoch angelegt. Kann es sein, dass du diesen Schritt übersprungen hast?
 

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
hallo, ich habs bei einem freund nach deiner anleitung versucht und es kam auch, dass es richtig konfiguriert worden ist. Aber ein make kann ich nicht ausführen. Dort erscheint dann "sh: make: not found"

Edit: Davor sieht es so aus:

./configure --prefix=/volume1/homes/mailman --with-username=mailman --with-groupname=mailman --with-mailhost=sonio.no-ip.biz --with-urlhost=sonio.no-ip.biz --with-python=/opt/bin/python2.6

Edit:
Ich musste mit ipkg install den optware-devel noch installieren^^

Edit2:
Muss es eigentlich list.meinedomain.de.ltd heißen, wenn meine domain meinedomain.de heißt
 
Zuletzt bearbeitet:

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
also wie ich des jetzt einrichte ist mir klar^^ ich hab da nur etwas überlesen und dann kanns ja natürlich nicht gehen. jetzt habe ich gerade eine mail gesendet und dann habe ich ne mail mit folgendem erhalten:

Command died with status 2:
"/volume1/homes/mailman/mail/mailman post test". Command output: Group
mismatch error. Mailman expected the mail wrapper script to be executed as
group "mailman", but the system's mail server executed the mail script as
group "nobody". Try tweaking the mail server to run the script as group
"mailman", or re-run configure, providing t

bitte um hilfe
 

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
./configure --prefix=/volume1/homes/mailman --with-mailhost=domain.tld --with-urlhost=familie-doerflinger.dyndns.org --with-python=/opt/bin/python2.6 --with-username=mailman --with-groupname=mailman --with-mail-gid=mailman -with-cgi-gid=nobody

Also ich habs jetzt mal so versucht:
Ich habe den Benutzer und die Gruppe mailman angelegt und dem Benutzer ein Passwort gegeben
Dann habe ich ipkg installiert
Danach habe ich folgenden Code eingegeben:
Code:
ipkg install python26
ipkg install gcc
ipkg install libs
ipkg install nano
mkdir /volume1/tmp/
wget http://ftp.gnu.org/gnu/mailman/mailman-2.1.14.tgz
gunzip -c /volume1/tmp/mailman-2.1.14.tgz | tar xvf -
chown -R mailman:mailman /volume1/tmp/mailman-2.1.14
su mailman
cd /volume1/tmp/mailman-2.1.14
./configure --prefix=/volume1/homes/mailman --with-mailhost=domain.tld --with-urlhost=domain.tld --with-python=/opt/bin/python2.6 --with-username=mailman --with-groupname=mailman --with-mail-gid=mailman -with-cgi-gid=nobody
make
make install
exit
/volume1/homes/mailman/bin/check_perms -f
/volume1/homes/mailman/bin/check_perms -f
su mailman
/volume1/homes/mailman/bin/newlist mailman

Dort habe ich dann meine Mailadresse und das Passwort vom Benutzer Mailman angegeben (weiss nicht, ob des variiren darf)

Dann habe ich dass notiert, was da stand, dass dürfte folgendes sein:
Code:
## mailman mailing list
mailman:              "|/volume1/homes/mailman/mail/mailman post mailman"
mailman-admin:        "|/volume1/homes/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/volume1/homes/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/volume1/homes/mailman/mail/mailman confirm mailman"
mailman-join:         "|/volume1/homes/mailman/mail/mailman join mailman"
mailman-leave:        "|/volume1/homes/mailman/mail/mailman leave mailman"
mailman-owner:        "|/volume1/homes/mailman/mail/mailman owner mailman"
mailman-request:      "|/volume1/homes/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/volume1/homes/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/volume1/homes/mailman/mail/mailman unsubscribe mailman"

Danach habe ich folgendes eingegeben:

Code:
/volume1/homes/mailman/bin/mmsitepass PASSWORT_VOM_BENUTZER_MAILMAN
exit
nano -w /usr/syno/mailstation/etc/aliases
Im nano-editor habe ich dann ganz nach unten gescrollt und das Notierte hineinkopiert. Danach habe ich STRG + O, bestätigen und STRG + X gedrückt

Danach habe ich
Code:
/usr/syno/mailstation/bin/newaliases
ausgeführt.

danach habe ich alles weitere ebenso gemacht, wie bei dir und trotzdem will der nicht, warum?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hast du den configure & make als root gemacht? Du solltest dabei bereits mailman sein! Nur check_perms ist als root auszuführen.
Wie hast du denn mailman an postfix angebunden? Mit dem entsprechenden python Script? Wenn ja dann zeig mal die Zeile aus master.cf vom postfix. Dort kannst du ja den User/Gruppe angeben unter dem/der postfix das Script ausführen lassen soll. Du scheinst dort wohl etwas nicht eingetragen zu haben, sonst würde postfix nicht versuchen das Script unter nobody laufen zu lassen
Und ja du solltest unbedingt eine Subdomain deiner Domain für mailman verwenden. Sonst kriegst du Ärger mit der regulären Mailzustellung an deine Domain
 

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
Ja, ich hab des als mailman gemacht und dann beim check-perms als root

Ich habe dann die master.cf folgenden Eintrag gesetzt:

Code:
mailman unix  -       n       n       -       -       pipe
      flags=FR user=mailman:mailman
      argv=/volume1/homes/mailman/postfix-to-mailman-2.1.py ${nexthop} ${user}

Bei mir heißt die Datei auch postfix-to-mailman-2.1.py

Diese habe ich schon vor dem check-perms reinkopiert und fixxen lassen.

In der Datei habe ich folgendes angepasst:
MailmanHome = "/volume1/homes/mailman";

Als MailmanOwner habe ich des eingegeben, was ich auch beim Befehl

/volume1/homes/mailman/bin/newlist mailman

eingegeben habe.

Der Server startet auch laut Telnet den Mailman und bringt bei einem Restart von Postfix keinen Fehler. Allerdings bekomme ich eine Zurückgeschickte mail, bei dem der Fehler steht, denn ich hier schonmal gepostet habe

Edit:
Ich hab natürlich auch ein Mailman-Nutzer eingefügt, mit

http://domain.tld/mailman/admin/mai...o_list_owner=1&subscribees=meinemail@yahoo.de

Edit2:
Ich hab des mit --with-python=/opt/bin/python2.6 eingefügt, weil er Python nicht gefunden hat
des mit --with-mail-gid habe ich erst nachdem ich die Mail erhalten habe ausgeführt. Dort stand ja, dass ich des mit dem Parameter machen soll und hab dann alles nochmal durchlaufen lassen
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich hoffe du hast die Codezeile aus der master.cf beim Einfügen hier im Forum angepasst. Wenn die so in der Konfig steht dürfte postfix eigentlich nicht mehr starten. Die zweite Zeile sollte eine einzige Zeile sein und mit einem Leerzeichen (keinem TAB!) eingeleitet werden
 

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
natürlich, des habe ich gemacht. Ich hab allerdings keine Subdomain, müsste aber auch so gehen, oder?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ohne Subdomain könnte es dir passieren, dass "normale" Mails an mailman gehen resp mailman Mails an den "normalen" Server. Da ist das Chaos vorprogrammiert. Auf jeden Fall solltest du eine Sub verwenden.
Allerdings sollte das nicht für diesen Fehler verantwortlich sein. Wenn postfix die Gruppe nobody verwendet obwohl du klar mailman vorgibst, dann hat dies sicher nichts mit Sub oder Nicht-Sub zu tun.
Nur um sicherzugehen:
Die Gruppe mailman existiert?
Die Datei postfix-to-mailman.py gehört mailman und auch Gruppe ist mailman?
Die Datei ist für "others" lesbar und ausführbar?
Die restlichen Anpassungen an postfix (main.cf) hast du ebenfalls gemacht?
 

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
mmh, ja, hab ich alles gemacht

soll ich mal --with-mail-gid setzen und dort den wert mailman zuweisen? weil wenn ich einstelle, dass er nobody macht, dann bekomme ich den fehler, dass es als nobody ausgeführt hat, aber als users ausführen sollte. und so wie ich des verstehe, muss des als mailman ausgeführt werden. Richtig?

edit: vielleicht noch ein reboot?

Also ich kann jetzt über telnet als user mailman folgendes ausführen:

/volume1/homes/mailman/mail/mailman post mailman
 
Zuletzt bearbeitet:

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
jetzt läufts auf einmal. ich hab nochmal die master.cf angepasst. Dann hab ich doch wohl vergessen ein Tab anzupassen^^ Aber jetzt gehts (zum Glück)

--with-mail-gid muss nobody sein. bei users, root oder mailman gibt es konflikte
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
--with-mail-gid muss nobody sein. bei users, root oder mailman gibt es konflikte
dann ist ja gut, dass es jetzt läuft.
Weisst du was with-mail-gid macht? Es legt nicht die Gruppe fest unter der das Script läuft, sondern es definiert die Gruppe die das Script aufrufen darf.
Wenn du jetzt also nobody brauchst, dann frage ich mich warum zum Henker dein Mailserver (postfix) versucht das Script als Gruppe nobody aufzurufen. Letztendlich heisst das, dass dein Postfix unter nobody zu laufen scheint und das ist imho definitiv nicht korrekt.
Ich guck mir zu Hause mal nochmals meine Konfig an. Das Problem an nobody ist, dass dies dieselbe Gruppe ist wie der Webserver und das kann heikel sein.
 

DEDEX7200Pro

Benutzer
Mitglied seit
15. Mrz 2010
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
hallo jahlives, ich hab des ganze ja jetzt schon seit längerem am laufen, jetzt hätte ich aber gern statt mailman@domain.de die liste info@domain.de oder support@domain.de. Was mich ich da machen? Ich habe gehofft, dass ein

/volume1/homes/mailman/bin/newlist support

bzw. ein

/volume1/homes/mailman/bin/newlist info

zuwie die Anpassung von der "/usr/syno/mailstation/etc/aliases" ausreicht, geht aber nicht
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat