Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

formail: Header setzen und filter weiter durchlaufen

Alles rund um das Internet, Internet-Anwendungen (E-Mail, Surfen, Cloud usw.) und das Einrichten von Netzwerken einschl. VPN unter Linux

Moderator: Moderatoren

Gesperrt
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

formail: Header setzen und filter weiter durchlaufen

Beitrag von XeN »

Hallo, muss noch einmal nerven =).

Also ich möchte gerne eine Headerzeile hinzufügen in eine eMail hinzufügen. Das Problem ist nur das bei mir auf grund der Komplikationen mit Cc immer nur eine Kopie zugestellt wird und das "Original" rauscht einmal durch alle filter durch und landen bei den nachrichten die "Nicht zustellbar sind" Da das aber doof ist wollte ich die eMails die zugestellt wurden mit einem "X-Delivered: TRUE" header versehen und die eMails die einen solchen header haben löschen.

hier ein auszug aus der Procmailrc von mir:

Code: Alles auswählen

# --- <Header Setzen> ---
:0cw
* ^(TO|Received).*sebastian@*
| formail -I "X-Delivery: TRUE"
# --- </Header Setzen> ---

# --- Restliche mails in die Inbox sortieren ---
:0 c
* ^(TO|Received).*sebastian@*
| /sbin/cyrdeliver -a -m sebasti
# --- bei Fehler zurueck in Queue
:0 e
{ EXITCODE=75 HOST }
# --- Restliche mails in die Inbox sortieren ende ---
Das Problem ist, entweder die eMail landet in der Mailbox für nicht zustellbare eMails UND in meiner mailbox, aber dann OHNE den header. Oder sie landet beim root in /var/spool/mail/root, wobei sie dann die headerzeile hat.

Wie kann ichs nun machen das der Header mit der bedingung geändert wird, die headerzeile geschrieben wird, dann die eMail ganz normal weiterläuft?

danke schon mal mfg XeN
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

man [procmail|procmailrc|procmailex]

Deine recipes sind alle mit :0c markiert, d.h. jedes Recipe arbeitet mit einer CarbonCopy

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

Danke für deinen beitrag, aber soweit das ich jedesmal eine Kopie mache war ich schon =), wie man meinem beitrag auch entnemen kann ;-).

Dies ist auch gewollt. Was nicht gewollt ist, ist das entweder die zeile hinzugefügt wird, dann aber nicht zugestellt wird. Oder die zeile nicht hinzugefügt wird und die mail dafür ankommt.

mfg
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

Code: Alles auswählen

:0cw
* ^(TO|Received).*sebastian@*
| formail -I "X-Delivery: TRUE"
# --- </Header Setzen> ---

# --- Restliche mails in die Inbox sortieren ---
:0 c
* ^(TO|Received).*sebastian@*
| /sbin/cyrdeliver -a -m sebasti
# --- bei Fehler zurueck in Queue 
die beiden recipes arbeiten _nicht_ auf der gleichen Mail --> jeweils auf einer Kopie!

schreib mal genauer, was Du willst, was soll durch das "X-Delivery: TRUE" ereicth werden? Du willst alle Mails an sebastian taggen und mit cyrdeliver einordnen und alls anderen Mail löschen?

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

Das Grundproblem besteht darin das ich im moment ca 7 user auf dem Mailsystem habe. Das bedeutet das ich auch 7 filterdateien habe die nicht in den Homes liegen sondern in einem unterverzeichnis von /etc/procmail. Von da werden sie in die "haupt" procmailrc eingebunden diese wird in die /etc/procmailrc eingebunden.

Muss es so machen weil ich die regeln per script anfüge und erstelle. Da die letzte regel aber immer ein auffangbecken für nicht einsortierbare mails sein soll musste ich das so machen.

Jedenfalls angenommen ich ziehe keine copys sondern mache es mit :0w, und es kommt eine email an user1@domain mit cc an user2@domain und user1@domain steht in der "haupt.procmailrc" zuerst. Dann zieht die regel und die eMail kommt nicht mehr beim user2@domain an. Deswegen die copys.

Da nun aber dann alle eMails im auffangbecken landen und das bei einem echtbetrieb mit 100 usern ganz gut mein email postfach fluten würde möchte ich alle eMails die einsortiert wurden markieren und anhand dieser vor dem auffangbecken löschen.

ich weiss es ist extrem rumgetrixt, aber ich hab halt keine lust für jeden user eine regel zu basteln, zumal die immer gleich sind. Also habe ich in das useradd script für unsere groupware einfach ein paar zeilen hinzugefügt die an die haupt.procmailrc die verweiszeile auf user.procmailrc hinzufügt und die user.procmailrc erstellt.


wuaaaa wieder was viel geschrieben, hoffe du verstehst was ich möchte. Vielleicht hast du ja auch eine idee mit der ich diese Copy fummelei gar nicht machen muss.

mfg XeN
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

Ah, jetzt ja.

dann würde ich diese richtung mal evaluieren (quick-hack-with-no-manpage-reading-and-no-testing-beware):

Code: Alles auswählen



:0
*^TO_user1
{ 
  :0 
  | formail -I "X-Delivered:TRUE

  :0c
  | cyrdeliver blah
}

:0
*^TO_user2
{ 
  :0 
  | formail -I "X-Delivered:TRUE

  :0c
  | cyrdeliver blah
}

... fortsetzen bis user n

:0 
* ^X-Delivered
/dev/null

# rest in inbox
wie gesagt, nur so als Simple idee...

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

Also habs jetzt mal getestet und die Regel sieht nun so aus

Code: Alles auswählen

:0
* ^(TO|Received).*sebastian@*
{
        :0
        | formail -I "X-Delivered:TRUE"

        :0c
        | /sbin/cyrdeliver -a -m sebasti
}
Das ist der Output der procmail.log

Code: Alles auswählen

procmail: Assigning "INCLUDERC=/etc/procmail/sebasti.procmailrc"
procmail: Match on "^(TO|Received).*sebastian@*"
procmail: Assigning "LASTFOLDER=formail -I X-Delivered:TRUE"
procmail: Notified comsat: "root@:/formail -I X-Delivered:TRUE"
 Subject: das
  Folder: formail -I X-Delivered:TRUE                                      1735
procmail: Executing "formail,-I,X-Delivered:TRUE"
So landet die eMail irgendwo im nirvana. Sie kommt noch nichtmal beim root unter /var/spool/mail/root an =(.
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

ich sach ja ist nix getestet :) da muss wahrscheinlich noch ein [f]ilter-Flag dazu, wenn mir noch was einfällt melde ich mich :P

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

an den flags probiere ich gerade rum.

Fakt ist jedenfalls das es funktioniert wenn ich das Formail auskommentiere. Also ist an der regel an sich nicht falsch. Ich vermute nur das er das formail falsch versteht und deshalb versucht es in eine mailbox formail ... zu schieben. ich werde weiter probieren.

Danke dir schon mal mfg XeN
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

dann versuchs mal mit dem kompletten Pfad zu formail...

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

hab ich auch schon versucht, jedoch ohne erfolg.

mfg
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

interessantes Problem :) ich bin mir z.zt. nicht sicher, ob das mit den Nested Blocks wirklich funktioniert (wäre eleganter, aber...), aber das hier ist noch eine andere Idee (ausgehend von Deiner 1. Variante:

Code: Alles auswählen

# Header setzen, Recipe als Filter und wait
:0 fw
* ^(TO|Received).*sebastian@*
| formail -I "X-Delivery: TRUE"
# ---

# --- an User zustellen (Kopie + wait)
:0 cw
* ^(TO|Received).*sebastian@*
| /sbin/cyrdeliver -a -m sebasti

# --- alle zugestellten verwerfen (keine Kopie)
:0 w
* ^X-Delivery: TRUE
/dev/null

# --- rest an müllsammler
:0
| /sbin/cyrdeliver -a -m muellsammler

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

hmmm

also nun sortiert er die mails wenigstens wieder zum root. Da ist dann auch wieder das X Tag drinne. Aber ich verstehe nicht warum nun gar keine mail bei mir ankommt.

Irgendwie macht mich die ganze sache völlig wahnsinnig.

mfg


[edit]
Ich glaube Procmail hat ein Problem wenn ich formail mit :0fw einleite. Immer wenn ich das mache bekomme ich einen error 65 von cyrdeliver raus
[/edit]
Zuletzt geändert von XeN am 3. Mär 2005, 14:38, insgesamt 1-mal geändert.
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

sehr seltsam, schalt mal das logging auf verbose und teste was da passiert.

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

Hab das logging schon auf verbose.

hier die zeile aus dem log

Code: Alles auswählen

procmail: Assigning "INCLUDERC=/etc/procmail/sebasti.procmailrc"
procmail: Match on "^(TO|Received).*sebastian@*"
procmail: Executing "formail,-I,X-Delivery: TRUE"
procmail: Match on "^(TO|Received).*sebastian@*"
procmail: Executing "/sbin/cyrdeliver,-a,-m,sebasti"
procmail: Program failure (65) of "/sbin/cyrdeliver"
procmail: Assigning "LASTFOLDER=/sbin/cyrdeliver -a -m sebasti"
procmail: Assigning "EXITCODE=75"
procmail: Assigning "HOST"
procmail: HOST mismatched "mail"
procmail: Assigning "PATH=/root/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11"
procmail: Locking "/var/spool/mail/root.lock"
procmail: Assigning "LASTFOLDER=/var/spool/mail/root"
procmail: Opening "/var/spool/mail/root"
procmail: Acquiring kernel-lock
procmail: Unlocking "/var/spool/mail/root.lock"
procmail: Notified comsat: "root@3610:/var/spool/mail/root"
From absender@domain.de  Thu Mar  3 14:22:23 2005
 Subject: test
  Folder: /var/spool/mail/root                                             1808
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

XeN hat geschrieben:Hab das logging schon auf verbose.

hier die zeile aus dem log

Code: Alles auswählen

...
procmail: Program failure (65) of "/sbin/cyrdeliver"
...
meinst Du nicht, dass Du dich darum kümmern solltest?

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

danach google ich die ganze zeit schon. Habe bis jetzt aber nur herausbekommen das das damit zutun hat das cyrdeliver von procmail nicht das übergeben bekommt was es gerne hätte. Aber genauer weiss ichs im moment auch nicht.

wobei der fehler auch nur dann kommt wenn ich die "f" flag gesetzt habe

mfg
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

nachdem ich nochmal drüber nachdenke: Du wirst immer Probleme bekommen, wenn Du user1 und user 2 in einer Mail hast, (to und CC) dann wird bei beiden Kopien (durch das flag c wird ja eine Kopie angelegt) der user1 mit ^TO_user1 matchen und somit wird der beide Kopiene bekommen.

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
XeN
Newbie
Newbie
Beiträge: 49
Registriert: 29. Dez 2004, 11:23

Beitrag von XeN »

eigendlich nicht weil:

email kommt.

check user 1 to -> no match
check user 1 cc -> MATCH -> ziehe copie -> stelle zu
check user x to -> no match
check user x cc -> no match
check user 2 to -> MATCH -> ziehe copie -> stelle zu
check user 2 cc -> no match
check sammelbox * -> match -> verschiebe in sammelbox


so siehts im moment aus

Habe mir auch überlegt. Kann ich nicht einfach als regel vor der Sammelbox sagen. Lösche alle eMails deren to,cc usw in der adressen.txt stehen?

Müßte man eigendlich machen können. Ich werd mal rumversuchen.

mfg
Gesperrt