[PROCMAIL] forwarden EN aanpassen TO address

Pagina: 1
Acties:

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
ik zit een beetje te spelen met procmail en het lukt me al wel om een mailtje te forwarden maar ik vroeg me af of het ook mogelijk is om met via een MATCH oid het forward adres aan te passen in het from adres en viceversa.

in feite stuur je een mail naar je zelf met als afzender het adres waar het eigenlijk naar toe moet.

klinkt raar maar het is handig als je mail wil versturen vanaf een plaats waar je alleen maar beschiking hebt over een bepaald email adres maar het wil laten lijken alsof je vanaf je andere email adres mailt.

voorbeeld:

ik heb thuis een mailbox piet@thuis.nl

ik kan alleen maar met mijn piet@werk.nl mailadres mailen vanaf mijn werk.

ik wil vanaf mijn werk een mailtje naar barbie@ergens.nl sturen,
en barbie moet denken dat het mailtje vanaf piet@thuis.nl kwam.


dus ik stuur een mailtje:

FROM: [forward]barbie@ergens.nl
TO: piet@thuis.nl
SUBJECT: hello there
BODY: blablablabla

dan zou het dus in pseudo code zoiets moeten worden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HOME=/home/piet
MAILDIR=$HOME/mail
LOGFILE=/dev/null
VERBOSE=off
LOGABSTRACT=on
SENDMAIL=/usr/sbin/sendmail

:0
* ^From:.*[forward]
VAR_FROM = From:
{
        :0
        From: = To:
        ! VAR_FROM
}


geen idee of dit kan en of iemand begrijpt wat ik bedoel... ;)

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
NIEMAND?!?
ECHT NIEMAND:!?!?@$#$
KAN NIEMAND MIJ DAN HELPEN :'(

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Als je alleen met je pietje@werk.nl adres kunt mailen, hoe wil je dan barbie@ergens.nl in de "from:" header krijgen?

Het werkt misschien beter als je het uiteindelijke doeladres in de subject verwerkt en dat stuk er met MATCH uithaalt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
:0
* ^Subject:.*forward:\/[^ ]+
{
      # haal forwarding adres uit subject
    TO="$MATCH"

  :0
  * ^Subject:[ ]*\/.+
  {
      # maak nieuw subject, zonder forwarding adres
    SUBJECT=`echo "$MATCH" | sed -e 's/forward:.*//``

      # vervang subject en to headers
    :0 fhw
    | formail -I "Subject: $SUBJECT" -I "To: $TO"

      # en forwarden maar...
    :0
    ! "$TO"
  }
}

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
dat ziet er goed uit.
op zich geen slecht idee om het gewoon in de subject meetegeven.

echter,
het werkt niet bij mij.
als ik zo naar die regex kijk dan moet het subject dus in deze vorm zijn(toch?):

Subject: bla bla forward:/barbie@ergens.nl

ik begrijp ook niet helemaal hoe die matched, ik ken alleen de variant met haken dus ik zou dit verwachten:
* ^Subject:.*forward:\/([^ ]+)

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

man procmailrc
code:
1
2
3
4
MATCH      This variable is assigned to by  procmail  whenever  it  is
           told  to  extract  text from a matching regular expression.
           It will contain all text matching  the  regular  expression
           past the `\/' token.


Hij matched dus alles wat door de reguliere expressie wordt gematched die achter de backslash/forwardslash-combinatie \/ staat.

Het subject moet dan in deze vorm staan (zonder die forward slash!!!):
code:
1
Subject: het echte subject forward:barbie@ergens.nl


Eigenlijk zou het nog mooier zijn als je 'm als volgt matched, zodat je iets meer zekerheid hebt dat er achter 'forward:' een echt mailadres staat:
code:
1
* ^Subject:.*forward:\/[^ ]+@[^ ]+\.[^ ]+


Maar ik zou eenvoudig beginnen, dan kun je het later nog altijd verfijnen. Omdat je nu twijfelt over het eerste recipe, zou je die eerst kunnen testen, zonder nog iets aan het subject te veranderen:
code:
1
2
3
:0
* ^Subject:.*forward:\/[^ ]+
! test@ergens.nl


Als mail met zo'n speciaal subject dan naar test@ergens.nl wordt geforward, dan weet je in elk geval al dat dat deel werkt.

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
aha!

heb ook eens naar de voorbeelden in 'man 5 procmailex' gekeken en begin het al een beetje te snappen.

maar,

dit werkt prima:
code:
1
2
3
:0
* ^Subject:.*forward:\/[^ ]+
! test@ergens.nl


en dit lijkt wel helemaal nix te doen.
code:
1
2
3
4
:0
* ^Subject:.*forward:\/[^ ]+
TO="$MATCH"
! "$TO"


enig idee?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

code:
1
2
3
4
5
6
7
8
:0
* ^Subject:.*forward:\/[^ ]+
{
  TO="$MATCH"

  :0
  ! "$TO"
}


Zet deze regels eens bovenaan je .procmailrc file, dan krijg je daarin uitgebreide info over wat mis gaat:
LOGFILE=~/procmail.errors
VERBOSE=yes

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
hehe, eindelijk,
found it!!!

dat sed commando werd afgesloten met 2 backticks.

tnx a lot!!! :)

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
ik heb iets te vroeg gejuigt,

ik heb het nu ook zo aangepast dat het from adres automatisch het initieeele to adres word maar,
ik bedenk me nu pas dat het allemaal niet zoveel zin heeft,
als je namelijk nu ook een cc wil versturen dan gaat dat dus altijd via de mail server van piet op kantoor,
daar is nix aan te doen.
of je zou in de subject regel in die forward meerdere email adresssen moeten kunnen mee geven en dan met een regex alles uit de forward moeten gaan peuteren en een voor een gaan versturen (subject: bla bla forward:aa@bb.cc, ee@ff.gg, hh@ii.jj, etc@etc.etc)

dat gaat mij op dit moment wel weer errug ver.

dan maar gewoon een webmail client bouwen.

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Overigens moest dat sed commando afgesloten worden met 1 tick, gevolgd door 1 backtick (was een tikfout)

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
rvm schreef op 13 november 2002 @ 10:27:
Overigens moest dat sed commando afgesloten worden met 1 tick, gevolgd door 1 backtick (was een tikfout)
klopt, een tick fout ;)
dat was dus het probleem waarom het niet werkte.

trouwens,
ik heb het nu zo aangepast dat
- het TO adres gewoon ook het TO adres blijft,
- het FROM adres de waarde van TO adres krijgt
- het CC adres de waarde van de MATCH krijgt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
:0
* ^Subject:.*forward:\/[^ ]+
{
      # haal cc adressen uit subject
        CC="$MATCH"
  :0
  * ^Subject:[ ]*\/.+
  {
      # maak nieuw subject, zonder forwarding adres
    SUBJECT=`echo "$MATCH" | sed -e 's/forward:.*//'`

      # vervang SUBJECT, CC, FROM en TO headers
    :0 fhw
    | formail -I "Subject: $SUBJECT" -I "Cc: $CC"  -I "To: $TO" -I "From: $TO"

      # en forwarden maar...
    :0
    ! "$TO"
  }
}


bovenstaande werkt helaas alleen niet,
als ik mijn log kijk dan is het To en From adres leeg...
code:
1
2
procmail: Executing "formail,-I,Subject:  testsubjectblabla ,-I, 
Cc: jan@hotmail.com;klaas@hotmail.com,-I,To: ,-I,From: "



ligt dit aan mijn syntax?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
wieurd,
ik had geen idee in welke variabele TO; zit dus heb het er ook maar even met grep en sed er uit geahaald, dus die To gaat nu goed.

ik heb het verder nu zo gemaakt dat alles achter forward geBCC-eed word maar dat werkt helaas niet.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
:0
* ^Subject:.*forward:\/[^ ]+
{
      # haal cc adressen uit subject
        BCC="$MATCH"
  :0
  * ^Subject:[ ]*\/.+
  {
      # maak nieuw subject, zonder forwarding adres
    SUBJECT=`echo "$MATCH" | sed -e 's/forward:.*//'`

        TO=`grep -e "^to:" -i | sed -e 's/[Tt]o: //g'`

      # vervang SUBJECT, BCC, FROM en TO headers
    :0 fhw
    | formail -I "Subject: $SUBJECT" -I "Bcc: $BCC"  -I "To: $TO" -I "From: $TO"

      # en forwarden maar...
    :0
    ! "$TO"
  }
}


in de log ziet er trouwens wel goed uit :?
code:
1
2
procmail: Executing "formail,-I,Subject:  2626sdf ,-I,Bcc: giluxxx@hotmail.com,-I,
To: piet@home.nl,-I,From:piet@home.nl"

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Als je zo 'TO' eruit haalt, dan loop je de kans dat hij ook delen van de body van de email matched.

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
:0
* ^Subject:.*forward:\/[^ ]+
{
    # haal cc adressen uit subject
  CC="$MATCH"

  :0
  * ^Subject:[ ]*\/.+
  {
      # maak nieuw subject, zonder forwarding adres
    SUBJECT=`echo "$MATCH" | sed -e 's/forward:.*//'`
  }

  :0
  * ^To:[ ]*\/.+
  {
      # haal het To: adres uit de header
    TO="$MATCH"
  }

    # vervang SUBJECT, CC, FROM, headers
    # To: veld moet weg of in elk geval naar een andere mailbox, omdat
    # je anders een mail loop creeert.
    # In plaats van de CC header zou je de mailadressen ook allemaal in de
    # To: header kunnen zetten.
  :0 fhw
  | formail -I "Subject: $SUBJECT" -I "Cc: $CC" -I "From: $TO" -I "To:"

    # en forwarden maar...
    # Sendmail haalt nu zelf de juiste adressen uit de mailheaders, want
    # die zijn nu toch al mooi aangepast
    # met -f forceer je het return adres wat mooier.
  :0
  | $SENDMAIL -fpiet@thuis.nl -t
}

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
yesss,
het werkt nu als een zonnetje.

het rare was dat ik in eerste instantie op de zelfde manier die To er uit haalde maar kreeg steeds het adres eruit met toch een spatie ervoor...??

hoe dan ook, een berg bedankt! _/-\o_

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Graag gedaan :)

  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 13-05 09:49

jvhaarst

Eendracht maakt macht

Ehm, waarom zo moelijk ?
Je kunt toch eenvoudigweg je from of reply-to anders zetten in je mailprogramma ? Dan lijkt het voor de ontvanger ook alsof het vanaf dat adres komt.

If you don’t have enough time, stop watching TV.


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
jvhaarst schreef op 14 november 2002 @ 08:47:
Ehm, waarom zo moelijk ?
Je kunt toch eenvoudigweg je from of reply-to anders zetten in je mailprogramma ? Dan lijkt het voor de ontvanger ook alsof het vanaf dat adres komt.
nee natuuuuuuurlijk niet, wat is daar nou leuk aan??
dan leer toch helemaal niet hoe dat hele procmail werkt? ;)


maar serieus,
als je van een outgoing mail server gebruik moet maken die alleen maar een bepaald from adres accepteerd is dit dus een oplossing.

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who

Pagina: 1