Postfix > mailfilter if/else issieus

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Vincm
  • Registratie: December 2009
  • Laatst online: 22:19
Beste mede tweakers,

Na al een aantal uren gespeeld te hebben met een squirrelmail plugin (courier-vacation) t.b.v. de vakantieperiode, lukt het me maar niet om mails succesvol door het mailfilter te krijgen.

Constructie maildir's:
/var/spool/mail/virtual/domein/user1/
/var/spool/mail/virtual/domein/user2/
...etc

In main.cf en master.cf wordt alles naar mijn weten al op de juiste manier naar het filter gestuurd, ik zie namelijk aan de error en mail.log dat hij wordt aangeroepen (zie onder voor de error)

Relevante regels in main.cf:
code:
1
2
maildrop_destination_recipient_limit=1
virtual_transport = maildrop


Relevante regels in master.cf:
code:
1
2
maildrop  unix  -       n       n       -       -       pipe
     flags=DRhu user=virtual argv=/var/spool/mail/virtual/.mailfilter -d ${recipient} {$user} {$domain}



Het maildrop filter is /var/spool/mail/virtual/.mailfilter en bevat:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DEFAULT = "/var/spool/mail/virtual/$3/$2"

`test -f vacation.txt`
if ($RETURNCODE==0)
{
   `test -f vacation_subject.txt`
   if ($RETURNCODE==0)
   {
      SUBJECT=`cat vacation_subject.txt`
      cc "| mailbot -t vacation.txt -A 'From: $LOGNAME' -A 'Subject: $SUBJECT' /usr/sbin/sendmail -f ''"
   }
   else
   {

      cc "| mailbot -t vacation.txt -A 'From: $LOGNAME' /usr/sbin/sendmail -f ''"

   }

   `test -f vacation_cc_addresses.txt`
   if ($RETURNCODE==0)
   {

      CCADDRESSES=`cat vacation_cc_addresses.txt`


      `test -f vacation_keep_messages.txt`
      if ($RETURNCODE==0)
      {
         cc "! -f \"$FROM\" $CCADDRESSES"
      }
      else
      {
         to "! -f \"$FROM\" $CCADDRESSES"
      }

   }

}


De error die terug wordt gestuurd:
[code]Command died with status 2:
"/var/spool/mail/virtual/.mailfilter". Command output:
/var/spool/mail/virtual/.mailfilter: 1: DEFAULT: not found
/var/spool/mail/virtual/.mailfilter: 12: Syntax error: "else" unexpected
(expecting "then")[code]

Op een of andere manier worden de else'jes niet gepakt. Ook als ik alle else statements weghaal (niet wenselijk) doet hij het niet, dan krijg ik een foutmelding dat de laatste } niet correct is.

Heeft iemand enig idee waar dit aan kan liggen? Mijn linux-ubuntu ervaring is nog niet zo groot, ik heb mijn servertje sinds december.

Bij voorbaat heel erg bedankt,
Vincent

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 11-09 21:28

CAPSLOCK2000

zie teletekst pagina 888

Wat voor taaltje is dit? Het lijkt op bash-code...

Als het echt bash is, dan gaat het al in de eerste regel fout. Er mogen geen spaties om het =-teken staan.

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

  • Vincm
  • Registratie: December 2009
  • Laatst online: 22:19
Als ik de eerste regel verander, als in de spaties weghaal, de andere error bestaan.

Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Sorry hoor, maar als dit echt bash is, klopt er niets van.

Bash gebruikt geen { }, dat is java / C / een hoop andere talen, maar bash gebruikt if ; then ; fi constructies.

Dus het moet ongeveer zoiets worden:

code:
1
2
3
4
5
DEFAULT="/var/spool/mail/virtual/$3/$2"

if [ -f vacation.txt ]; then
   <berg code>
fi


"test -f" kun je ook vervangen door [ -f ]. Meestal doet "men" dit vanwege de leesbaarheid.

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • smesjz
  • Registratie: Juli 2002
  • Niet online
Het is geen bash maar gewoon maildrop's eigen filtering taal, dus die syntax is geldig. Zie ook http://www.courier-mta.org/maildropfilter.html

Je foutmeldingen komen waarschijnlijk door dit:
The grammar of this if statement is stricter than usual. If you get baffling syntax errors from maildrop, make sure that the braces, and the if statement, appear on separate lines. Specifically: the closing parenthesis, the closing braces, and the else statement, must be at the end of the line (comments are allowed), and there may not be any blank lines in between (not even ones containing comments only).
Die lege regels komen dus voor in jouw script.

Overigens vind ik http://www.postfix.org/VIRTUAL_README.html#autoreplies wel een goed alternatief. Je hebt dan gewoon een apart transport in master.cf voor auto-reply. Dus je hebt al die logica niet in je maildrop script. Persoonlijker vind ik Sieve nog wat mooier omdat je niet in de user's homedir gaat schrijven, je praat slechts tegen een daemon.

[ Voor 0% gewijzigd door smesjz op 24-07-2011 20:50 . Reden: Typo ]


Acties:
  • 0 Henk 'm!

  • Vincm
  • Registratie: December 2009
  • Laatst online: 22:19
Bedankt voor je bericht smesjz. Ik denk alleen niet dat ik nu nog over ga stappen naar een andere methode, dan zie ik door de bomen het bos niet meer ;)

Nog het een en ander uitgeprobeerd n.a.v. je tip. Ook zonder die lege regels krijg ik de error. Ook als ik de regel 'cc "mailbot... etc uitcomment, krijg ik de error.

Nog een test geprobeerd
code:
1
sudo maildrop -V 9 -d gebruikersnaam@domein gebruikersnaam domein < /var/log/mail.err


Die gebruikt dan /etc/maildroprc als filter, welke exact hetzelfde is als bovenstaande .mailfilter file. Dan krijg ik een 'unable to open mailbox' error in beeld, terwijl het pad correct is (DEFAULT=/var/spool/mail/virtual/domein/gebruikersnaam/). Rechten op die map staan op virtual:virtual, net als /usr/bin/maildrop en de rest van het mailgebeuren.

Acties:
  • 0 Henk 'm!

  • smesjz
  • Registratie: Juli 2002
  • Niet online
nVincible schreef op maandag 25 juli 2011 @ 10:48:
Bedankt voor je bericht smesjz. Ik denk alleen niet dat ik nu nog over ga stappen naar een andere methode, dan zie ik door de bomen het bos niet meer ;)

Nog het een en ander uitgeprobeerd n.a.v. je tip. Ook zonder die lege regels krijg ik de error. Ook als ik de regel 'cc "mailbot... etc uitcomment, krijg ik de error.
Kan je je mailfilter na al die wijzigigingen nog eens tonen?
Nog een test geprobeerd
code:
1
sudo maildrop -V 9 -d gebruikersnaam@domein gebruikersnaam domein < /var/log/mail.err


Die gebruikt dan /etc/maildroprc als filter, welke exact hetzelfde is als bovenstaande .mailfilter file. Dan krijg ik een 'unable to open mailbox' error in beeld, terwijl het pad correct is (DEFAULT=/var/spool/mail/virtual/domein/gebruikersnaam/). Rechten op die map staan op virtual:virtual, net als /usr/bin/maildrop en de rest van het mailgebeuren.
Wat gebeurt er als je default laat loggen?

logfile="/tmp/deliver.log"
default="blabla"
log DEFAULT

Of laat eens zien wat -V 9 voor uitvoer geeft...

Als alternatief zou je eens strace kunnen gebruiken om te zien wat ie nu exact opent.
Pagina: 1