[Munich-pm] [halb OT] pcre für Postfix-Adressumschreibung

Rouchal, Marek marek.rouchal at intel.com
Mo Jun 9 23:34:20 PDT 2014


Ein guter Artikel zum Thema hier:
http://blog.mariusschulz.com/2014/06/03/why-using-in-regular-expressions-is-almost-never-what-you-actually-want

Auf dieses Problem uebertragen hiesse das wohl:
	<[^>\@]+\@
statt
	<.*?@
statt
	<.*@

Und die Behandlung der Nummer wuerde ich in ein wenig Code einpacken, etwa so:

	while( $while =~ s{^To:\s*([^<]*)<[^>\@]*\@\+([^>]*)>}{
                  my ($to,$num) = ($1,$2);
                  $num =~ s/\D+//g;
                  "To: $to <00$num\@faxmaker.com>"
                }ge ) {}
	print "while: $while\n";

Dann gehen auch Nummern wie +49 (89) 998-123456

Gruesse,

Marek

-----Original Message-----
From: Munich-pm [mailto:munich-pm-bounces+marek.rouchal=intel.com at pm.org] On Behalf Of Stephen Riehm
Sent: Monday, June 09, 2014 10:51 PM
To: Andreas Hernitscheck
Cc: Perl Mongers MUC
Subject: Re: [Munich-pm] [halb OT] pcre für Postfix-Adressumschreibung

Hi Stefan,

Ich denke zwei Kleinigkeiten müssten schon reichen:

	<.*?@ statt <.*@

und um mehrerer Empfänger zu behandeln entweder eine Vereinfachte Pattern und /g oder eine while Schleife, etwa so:

	$orig = 'To: =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +41 (8621) 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?= <LHG2 at +49 3212-1150047>';
	print "was:   $orig\n";

	$while = $orig;
	while( $while =~ s/^To:\s*(.*)<.*?@\+(\d+).*?(\d+).*?(\d+)>/To: $1 <00$2$3$4\@faxmaker.com>/ ) {}
	print "while: $while\n";

	$subst = $orig;
	$subst =~ s/<.*?@\+(\d+).*?(\d+).*?(\d+)>/<00$1$2$3\@faxmaker.com>/g;
	print "subst: $subst\n";

Cheers,

Steve

On 09.06.2014, at 21:44, Andreas Hernitscheck <tech at tool.de> wrote:

> Hallo Stefan,
> 
> es wäre leichter wenn du in Worten erklärst, was der Regex denn nun tun soll? 
> 
> Geht denn kein ///g am Ende, um es mehrmals durchführen zu lassen?
> 
> Durch einfaches Regex kann man es nicht lösen. Das Wiederholen muss schon vom Interpreter z.B. durch /g nutzbar gemacht werden.
> 
> Gibt es vielleicht die Möglichkeit das durch ein externes Script zu jagen?
> 
> 
> 
> 
> Am 09.06.14 10:29, schrieb Stefan Bauer:
>> Hallo nach München und Umgebung,
>> 
>> ich habe hier ein kniffliges Problem und verzweifle an der Lösung. Mit Postfix gibt es die Möglichkeit, das To: Feld im E-Mail Header umzuschreiben.
>> 
>> Das klappt mit meiner Regex prima für einen Empfänger - bei mehreren Empfängern gehen mir die Ideen aus, wie ich das umsetzen kann:
>> 
>> Mein Input-String ist:
>> 
>> To: =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +49 (8621) 
>> 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?= <LHG2 at +49 
>> 3212-1150047>
>> 
>> Mit folgender Anweisung setze ich den String um:
>> 
>> /^To:\s*(.*)<.*@\+(\d+).*?(\d+).*?(\d+)>/     To: $1 <00$2$3$4 at faxmaker.com>
>> 
>> Auf der Kommandozeile sieht man auch das Ergebnis (leider nur beim letzten Empfänger):
>> 
>> root at srv1:/home/stefan# postmap -q "To: 
>> =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +49 (8621) 
>> 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?= <LHG2 at +49 
>> 3212-1150047>" pcre:/etc/postfix/rewrite_tofieldTo: 
>> =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +49 (8621) 
>> 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?=  
>> <004932121150047 at faxmaker.com>
>> 
>> Danke
>> 
>> Stefan
>> 
>> 
>> _______________________________________________
>> Munich-pm mailing list
>> http://munich.pm.org/
>> Munich-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/munich-pm
> 
> --
> Andreas Hernitscheck
> 
> E-mail: 
> tech at tool.de
> 
> 
> Gertrud-Bäumer-Str. 14
> 80637 Munich, Germany
> 
> Phone: +49 176 210 16 397
> 
> GPG: 
> http://xantavia.net/downloads/team/andreashernitscheck/gpg/andreashern
> itscheck.asc
> 
> 
> 
> 
> _______________________________________________
> Munich-pm mailing list http://munich.pm.org/ Munich-pm at pm.org 
> http://mail.pm.org/mailman/listinfo/munich-pm

_______________________________________________
Munich-pm mailing list http://munich.pm.org/ Munich-pm at pm.org http://mail.pm.org/mailman/listinfo/munich-pm


Mehr Informationen über die Mailingliste Munich-pm