zitruslimmonade
Goto Top

Procmailrc - Syntax für automatic respond

Merkwürdige Syntax das face-smile

Guten Morgen,

Nachdem ich nun mit Hilfe unseres Mailadmins eine standard procmailrc datei für unsere User erstellt habe, haben wir aus verschiedensten Gründen die Notwendigkeit eine automatische Antwort zu senden sobald eine mail an eine bestimmte adresse ankommt (die muss allerdings nicht unterschieden werden da jeder user seine eigene Datei hat face-smile )

Das ist das eine Problem, das zweite scheint ein wenig komplexer zu sein

folgendes Szenario: Ich bekomme eine Spammail, unser Server besitzt einen spamfilter, in der procmailrc wird angegeben das die mail im fiklter getestet werden soll und dann weitergeleitet an eine zweite mailbox (zwecks archivierung) gut unser Spamfilter erkennt allerdings nicht das es sich um spam handelt und leitet sie demnach weiter an einen Server (im speziellen Fall T-Zones) Dieser erkennt allerdings den Spam und sendet eine Fehlermeldung an unseren Mailserver zurück mit der eigendlichen mail, da unser Spamfilter immernoch nicht reagiert und noch keine Filtermöglichkeit existiert (nach der ich hier frage) wird die mail wieder an t-zones weitergeleitet und das spiel beginnt von Vorn. Gut nach ca 50 mal ist schluss da der mailserver was gegen loops hat aber das ist kein Zustand

Meine Fragen beinhalten also die Syntax wie ich
1. Automatische Antworten erstellen kann
2. die Errormessages von T-Zones filtere

Herzlichen Dank

PS: No Idea about syntax of procmail... first contact yesterday morning face-smile

Content-Key: 36721

Url: https://administrator.de/contentid/36721

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 12:45:11 Uhr
Goto Top
Also irgendwie schein ich arg untypische Fragen zu haben face-smile Keine Antwort auf IP-Telefon-Fragen, keine Antwort auf procmailrc... mhh. dumme sache..

Eventuell erstmal soviel das Problem mit dem automatischen response hab ich mir jetz eventuell gelöst.
Im procmailrc habe ich das programm vacation aufgerufen, allerdings habe ich keine Ahnung ob das auch das macht was ich gern möchte... also das Programm schon aber ob es auch mit dem aufruf klappt...
Ich hatte es in der .forward datei getestet ohne den spamfilter zu benutzen.. das ging spitze, nur war dann auch ne antwort auf spammails zu erwarten was ich eigendlich vermeiden möchte

Eventuell jetz jem,and eine Idee ?? wär toll

gruss
chris
Mitglied: JohnnyB
JohnnyB 26.07.2006 um 14:35:47 Uhr
Goto Top
Allgemeine procmail - Syntax zum eintragen in die procmailrc

:0[Flags][[:]Sperrdatei]
*Bedingung
Aktion

Anmerkung: die Bedingung muß als Regulärer Ausdruck angegeben werden und Kommentare werden mit # eingeleitet.

#Autoresponse
:0
  • ^From:.*absender@boese-jungens\.org
  • !X-Loop: Benutzer@meinedomaene.com
| ( formail -r -a "X-Loop: Benutzer@meinedomaene.com"; \
echo "Dies ist eine automatisch erzeugte Antwort."; \
echo "Mail wurde abgelehnt; sie wird niemals gelesen werden." ) \
| sendmail -t -oi

#T-Zones Errormessage
:0
  • ^Subject:.*Errormessage-Betreff
/absoluten/Pfad/zum/Speicherort/der/Errormessage


Hinweis: Die Reihenfolge der Rezepte ist wichtig. Wenn eine Bedingung für eine zu prüfende Nachricht zutrifft, so werden die nachfolgenden Bedingungen nicht mehr beachtet, es sei denn eine oder mehrere der direkt nachfolgenden Bedingungen haben als Flags A, a oder e gesetzt.
Wenn als Aktion in eine Datei geschrieben wird, so sollte zumindest ein Doppelpunkt nach :0[Flags] gesetzt werden, damit bei hohem Nachrichtenaufkommen nicht mehrere Prozesse von procmail gleichzeitig versuchen in die selbe Datei zu schreiben. Wird da nur der Doppelpunkt angegeben, so erstellt sich procmail seine eigene Sperrdatei. Wird explizit eine Sperrdatei angegeben, so wird diese verwendet.
Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 14:53:58 Uhr
Goto Top
na das war auf jeden schon mal aufschlussreich, danke.. aber kannst du mir zwei sachen erklären, ich brauche folgende zwei dine, ersten den "nicht" befehl.. also wenn die bedingung nicht zutrifft
und wie gebe ich folgendes an wenn ich den from Mail Delivery Subsystem <MAILER-DAEMON@muni.cz> filtern will ??

Ich hatte bis jetzt folgende idee, ist aber nich ganz was ich wollte da die errors in eine spezielle box geleitet werden, das mag ich nich

:0fw
| /usr/local/bin/spamc
:0:
  • ^X-Spam-Status: Yes
mail/spam

:0:
  • ^subject: Mail Delivery Subsystem <MAILER-DAEMON@muni.cz>
mail/error

:0 c
|/usr/bin/vacation username
Mitglied: JohnnyB
JohnnyB 26.07.2006 um 15:14:51 Uhr
Goto Top
Zu erstens:
Eine Bedingung wird negiert, indem vor die Bedingung ein Ausrufezeichen gestellt wird. Das Ausrufezeichen steht für das logische NOT.

Zu zweitens:
Wenn Du die From-Zeile filtern willst:

  • ^From:.*MAILER-DAEMON@muni\.cz.*

Du hast es im Ansatz eigentlich richtig gemacht, nur muß man beim Umgang mit regulären Ausdrücken einiges beachten:
Ein Punkt steht immer für ein beliebiges Zeichen und ein Sternchen ist ein Multiplikator der angibt, daß das Zeichen/Ausdruck direkt vor dem Sternchen entweder keinmal, einmal oder beliebig oft vorkommen darf. Das Dach steht für den Zeilenanfang und ein $ steht für das Zeilenende.
Obige Zeile bedeutet also im einzelnen:
Die Zeile beginnt mit From: ( ^From: )
Danach können beliebig viele oder auch keine beliebigen Zeichen stehen ( .* )
Danach muß die genaue Gruppe MAILER-DAEMON@muni.cz folgen, hierbei ist es wichtig die Sonderfunktion des Punktes mit Hilfe des Backslashes auszuschalten.
Anschließend können wieder beliebig viele Zeichen kommen ( .* )

Generell solltest Du überall dort wo ein Leerzeichen steht die Kombination ( .* ) verwenden, es können ja auch mal mehrere sein, dann würde das nicht erkannt. Außerdem kann es sein, daß Sonderzeichen wie < oder > als Suchkriterien verwendet werden, daher solche Zeichen, auch Klammern immer mit dem Backslash eindeutig als Schriftzeichen markieren.

Hoffe, ich konnte helfen.
Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 15:18:37 Uhr
Goto Top
klasse man...
also noch mal besten dank und würde dir empfehlen die beiden posts einfach mal zu einem Tutorial zusammenzubauen.. ich weis nich obs jemand bracu (gab ja leider wenig anteilnahme face-smile) aber auf jeden Fall wars Hilfreich und hat mir echt weiter geholfen
Ich werd jetz mal das File anpassen und testen

tschau
chris
Mitglied: JohnnyB
JohnnyB 26.07.2006 um 15:24:14 Uhr
Goto Top
Keine Ursache.

Laß' uns wissen, ob es funktioniert. Und wenn ja, dann sei so nett und setz' den Thread auf solved.

Johnny.
Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 15:27:08 Uhr
Goto Top
:0fw
| /usr/local/bin/spamc
:0:
  • ^X-Spam-Status: Yes
mail/spam

:0c
  • !^From:.*MAILER-DAEMON@muni\.cz.*
backup@muni.cz

  • !X-Loop: Benutzer@ics.muni.cz
| ( formail -r -a "X-Loop: Benutzer@ics.muni.cz.com"; \
echo "Dies ist eine automatisch erzeugte Antwort."; \
echo "any tests, please dont pay attention to this email" ) \
| sendmail -t -oi

ist dat nun ritsch so ??
beim versenden der autoresponder bin ich mir absolut net sicher
Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 15:51:49 Uhr
Goto Top
könntest du dir die Mühe machen und mal die Syntax im weiter unten stehenden post chacken ??

wär super dann könnten eventuelle Probs nur anderweitig auftreten...

Dank
Chris
Mitglied: JohnnyB
JohnnyB 26.07.2006 um 16:07:08 Uhr
Goto Top
Also, ich würde erstmal Kommentare verwenden, das macht das ganze übersichtlicher.

#Schicke alle ankommenden Mails zum Spamfilter und warte darauf, daß sie bearbeitet werden
:0fw
|/usr/local/bin/spamc

#Schiebe alle Mails, die als Spam gekennzeichnet sind in das Verzeichnis MAILDIR/mail/spam
:0:
  • ^X-Spam-Status: Yes
mail/spam


So weit so gut. Was dann kommt, daraus werde ich leider noch nicht schlau. Du wilst eine Kopie aller Mails machen die von dem angegebenen Mailerdeamon kommen. Aber die zeile backup@muni.cz würde hier ja bedeuten, daß diese Kopien im Verzeichnis MAILDIR/backup@muni.cz gespeichert würden. Da mußt Du mir nochmal sagen, was Du damit machen willst.
Dann die Sache mit dem Autoresponder. Zum versenden ist eigentlich nur der Teil nach der Pipe notwendig. Mit formail -r wird eine Antwort generiert und bestehende Header und Body gelöscht. Mit der Option -a Header: Text wird der angegebene Header angefügt, wenn er nicht schon vorhanden ist. Die Echo-Befehle schreiben dann jeweils eine Zeile in den Message-Body und schließlich wird die Nachricht hier an sendmail zur Auslieferung übergeben (Wenn ihr ein anderes Programm zum ausliefern verwendet, dann mußt du nochmal zu deinem Mail-Admin). Hierbei bedeutet die Option -t, daß sendmail den Empfänger der Nachricht aus dem Nachrichten-Header feststellen soll, und -oi sorgt dafür, daß es keine Zeile behandelt, die nur aus einem einzigen Punkt als Eingabe enthält (wird nur selten gebraucht, wird aber üblicherweise eingefügt, um sicherzugehen).
Damit jetzt nicht der Empfänger deiner Nachricht, diese einfach wieder zurückschickt, haben wird den X-Loop Header eingefügt (formail -r -a "X-Loop: ich@meinedomaene.com";) und durch die Prüfung der Bedingung
  • !X-Loop: ich@meinedomaene.com
werden wir nur eine Antwort senden, wenn die Mail diesen Header nicht hat. Eventuell zurückgesendete Antwortmails können wir mittels

#Prüfe Mails auf Zurückgesendeten Autoresponse und schicke sie ins Nirvana
:0
  • ^X-Loop:.*ich@meinedomaene.com.*
/dev/null

ins Datennirvana schicken.
Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 16:15:48 Uhr
Goto Top
mhh also backup soll folgender massen funzen

vielleicht die ganze logik ist besser
also mail kommt im system an, mal wird auf spam geprüft und wenn nicht zutreffend dann wird geprüft ob sie eine deamon ist wenn auch das negativ sollen alle anderen mails die über bleiben an die 2.mailadresse geschickt werden.. wohin gegen die eigendliche mailbox auch die deamon mails bekommen soll...Da es nun einige Kollegen geben soll die urlaub haben, sollen emails die nicht spam und nicht deamon sind eine nachricht zugesendet bekommen

Ich hab hoffentlich nicht wieder das "vergnügen" mit dem emailadmin zu telefonieren.. sendmail is druff ... tja leider steh ich bei diesem herrn in ungnade aber das tut zur eigendlichen sache nichts, ist aber der grund warum ich den spass machen muss face-smile

könntest du mir sagen was ich anpassen muss das diese Logic dann auch hinhaut ??

danks nochmnal
Mitglied: JohnnyB
JohnnyB 26.07.2006 um 16:34:31 Uhr
Goto Top
Off Topic: Ich muß jetzt mal Einkaufen gehen und kann mich erst später wieder um dein Problem kümmern, sorry.

On Topic: Leider habe ich immer noch nicht ganz begriffen, was du machen willst. Hier mal so wie ich es verstanden habe:

1. alle Mails durch den Spamfilter schicken
2. Diejenigen Mails, die der Spamfilter als Spam gekennzeichnet hat in ein Spamverzeichnis schieben.
3. Bei den restlichen prüfen, ob sie von dem Mailerdeamon stammen und falls ja soll eine Kopie davon an backup@muni.cz schicken
4. Alle restlichen Mails, zusätzlich die vom Mailerdeamon ins Mailpostfach verschieben.
5. Für Kollegen, die im Urlaub sind, soll für jede reguläre (also gültige) Mail, die nicht von dem Mailerdeamon sind, eine entsprechende Mitteilung, daß der Empfänger im Urlaub ist an den Absender geschickt werden.
Mitglied: Zitruslimmonade
Zitruslimmonade 26.07.2006 um 16:39:24 Uhr
Goto Top
genau anders rum.. die mails vom deamon nur in die Inbox und die restlichen, nicht spam mails neben der inbox auch an die Backup emailadresse...

Eine automatische antwort soll auf alle nicht spam und nicht deamon mails geschickt werden...
genau das ist das prob

Muss leider auch weg... Haben noch ein meeting und dann wirds nach 14 stunden arbeit auch mal zeit ins bett zu fallen...

ich danke dir schon mal und freu mich morgen weiter zu basten face-smile
Dank dir für die Hilfe (gut einkauf !!!)

gruss
chris
Mitglied: JohnnyB
JohnnyB 27.07.2006 um 00:43:07 Uhr
Goto Top
Ich würde es mal so probieren:

procmailrc

  1. Standardisiert das Headerformat, und sorgt dafür,
  2. daß nach jedem Header-Feldnamen ein Lehrzeichen steht
:0fwh
| formail -z

  1. 1. Regel
  2. Jede Mail an den Spamfilter schicken
:0fw:
|/usr/local/bin/spamc

  1. 2.Regel
  2. Jede Mail, die als Spam gekennzeichnet wurde ins Spamverzeichnis verschieben
:0
  • ^X-Spam: Yes
mail/spam

  1. 3. Regel
  2. Prüfen, ob Mail von Mailerdaemon stammt, wenn nicht, dann an eine Kopie an die Backup adresse schicken
:0fwc:
  • !^From:.*MAILER-DAEMON@muni\.cz.*
| ( formail -I "To: backup@muni.cz";) | sendmail -t -oi

  1. 4. Regel
  2. Prüfen, ob Empfänger im Urlaub ist, wenn ja wird eine Antwort erzeugt
  3. Benötigt die Textdatei /verwaltung/urlaub.txt
  4. Wird nur auf Nachrichten angewandt, die auch dem Muster der vorhergehenden Regel entsprechen (Option A)
  5. Hier auf alle Nachrichten, die nicht von dem Mailer-daemon stammen
:0Afwc:
  • ? formail -x"To:" | egrep -i -f /verwaltung/urlaub.txt
| ( formail -r; echo "Der Empfänger ihrer Mail befindet sich zur Zeit im Urlaub."; ) | sendmail -t -oi

  1. 5.Regel
  2. Alle Mails, welche die oben aufgeführten Regeln passiert haben in die Inbox verschieben
:0
mail/inbox

Anmerkung zur 4. Regel: In die Datei urlaub.txt trägst Du für jeden Kollegen, der im Urlaub ist eine Zeile mit seiner Email-Adresse ein. So mußt Du nicht jedesmal eine neue Regel für jeden Kollegen erstellen, sondern nur die entsprechenden Adressen in die Datei eintragen, bzw. entfernen, sobald der Kollege wieder im Dienst ist.

Da ich noch nie mit procmail gearbeitet habe und derzeit auch kein entsprechendes System zum testen, kann ich leider nicht prüfen, ob es funktioniert. Vor allem die Konstrukte mit den regulären Ausdrücken. Da kann es sein, daß die Negierung evtl. geklammert werden muß, also !(was auch immer) Das mußt du halt ausprobieren, dabei lernt man sowieso am meisten. Ich habe meine Infos nur aus einem Unix-Administrationsbuch zusammengebastelt, wo procmail nicht sehr ausführlich beschrieben ist. Hier noch zwei Internetseiten, die vielleicht hilfreich sein könnten:

1. Procmail Quickstart von Nancy McGough / Infinite Ink
www.ii.com/internet/robots/procmail/qs/

2. Timo Salmis Seite "Procmail Tips and Recipes"
www.uwasa.fi/~ts/info/proctips.html
Mitglied: Zitruslimmonade
Zitruslimmonade 27.07.2006 um 10:59:49 Uhr
Goto Top
hihi, was spass,
alle mal hände wech davon.. mir hats die mailbox destroyed face-smile derbe geschichte

werd mal testen woran es lag und liegt
gruss
chris