# Konzeptionsproblem bei Mailing-Liste

## l3u

Hallo :-)

Ich habe folgendes Problem: ich habe eine kleine Mailingliste programmiert (Mailman & Co. sind absoluter Overkill für das, wofür ich es brauche). Funktioniert so weit problemlos, und zwar folgendermaßen:

Auf meinem Postfix-Mailserver habe ich pro Mailingliste einen virtuellen Transport eingerichtet. Jede Mail, die an eine Mailingliste adressiert ist, wird also einfach an mein Programm gepiped.

Und jetzt zum Problem: wenn nicht nur eine, sondern mehrere Mailinglisten im To- oder Cc-Header stehen, dann arbeitet mein Programm alle ab. Der Mailserver liefert natürlich die E-Mail nicht nur ein Mal aus, sondern pro Empfänger ein Mal. Somit verteilt mein Programm eine E-Mail an Mailinmglisten zwei Mal, an drei drei Mal, etc., weil die E-Mails ja auch so oft an das Programm gepiped werden.

Die Frage ist jetzt: wie gehe ich an das Problem ran?

Kann ich Postfix sagen, dass eine E-Mail, die mehrere Adressen aus einem definierten Adresspool enthält nur ein Mal ausgeliefert werden sollen?

Alternativ könnt man ja die Message-ID jeder verarbeiteten E-Mail ein paar Minuten lang speichern und dann einfach die Verarbeitung der jeweiligen E-Mail abbrechen, wenn sie bereits verarbeitet wurde. Das wäre aber schon einiger Aufwand, zumal das Script einfach nur per Aufruf prozedural durchläuft, und ich somit z. B. eine Datei in /var/tmp/ anlegen müsste oder sowas, damit die Daten zwischen den Aufrufen erhalten bleiben.

Was meint ihr?

----------

## cryptosteve

 *l3u wrote:*   

> Und jetzt zum Problem: wenn nicht nur eine, sondern mehrere Mailinglisten im To- oder Cc-Header stehen, dann arbeitet mein Programm alle ab. Der Mailserver liefert natürlich die E-Mail nicht nur ein Mal aus, sondern pro Empfänger ein Mal. Somit verteilt mein Programm eine E-Mail an Mailinmglisten zwei Mal, an drei drei Mal, etc., weil die E-Mails ja auch so oft an das Programm gepiped werden

 

Ich glaube, ich verstehe das Problem noch nicht ganz. Wenn zwei Mailinglisten im TO-Header stehen, dann gehört die Mail doch auch in beide Listen?! Was für ein Verhalten erwartest Du sonst?

----------

## l3u

Also angenommen, To ist "liste1@server, liste2@server". Dann schickt Postfix diese E-Mail zwei Mal an mein Mailinglistenprogramm, da sowohl für "liste1@server" als auch für "liste2@server" je ein Transport zu dem Programm eingerichtet ist.

Das Programm bekommt jetzt die E-Mail. Es sieht, dass sie sowohl an "liste1@server", als auch an "liste2@server" gehen soll und verteilt die E-Mail an beide Listen.

Das war jetzt die erste Mail, also dir, die Postfix an "liste1@server" ausgeliefert hat. Tja, und dann kommt eben noch die Zweite, die an "liste2@server" geht – und natürlich auch bei meinem Programm landet. Und die wird wiederum genauso verteilt – also wird die E-Mail jeweils doppelt an jede Liste verteilt.

----------

## cryptosteve

Ah, ja, verstehe.

Hmm .. nach meinem Verständnis kommst Du nicht drum herum, entweder irgendwie zu speichern, welche Mails kürzlich schon beackert worden sind. Ob das dann unterm Strich einfacher ist, als einen Mailman aufzusetzen, oder die Mailingliste via procmail zu realisieren, weiss ich nicht.

----------

## l3u

Naja, es reicht ja, die Message-ID rauszuziehen, und eine leere Datei mit dem Namen in /var/tmp/... anzulegen. Und wenn's eine solche Datei schon gibt, dann bricht das Programm einfach ab. Die paar Zeilen Code mehr … ;-)

----------

