Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Regex und Mailheader

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
13pixelchen
PostRank 5
PostRank 5
Beiträge: 243
Registriert: 06.10.2005, 21:53

Beitrag von 13pixelchen » 08.09.2012, 21:17

Hallo,

ich möchte aus dem Mailquelltext den From-Header extrahieren, der sieht ja so aus:
From: abcöäü <mail@mail.de>
oder auch so:
From: "abcöäü" <mail@mail.de>

Habe das hier versucht was nicht funktioniert:
#\^From: [^<]* <(.*)>\]#m

Hat jemand bessere Ideen?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 08.09.2012, 23:00

Der Ausdruck an sich ist nicht das Problem, nur je nachdem was Du da benutzt, solltest Du beim Einlesen Hochkomma maskieren.

Code: Alles auswählen

<?php

$string = "From&#58; \"abcöäü\" <mail@mail.de>";
$muster = "/From&#58;&#40;.+&#41;<&#40;.+&#41;\.&#40;\w&#41;&#123;2,4&#125;>/i";

preg_match&#40;$muster, $string, $ausgabe&#41;;

echo htmlspecialchars&#40;$ausgabe&#91;0&#93;&#41;."\n";


// Ausgabe&#58; From&#58; "abcöäü" <mail@mail.de> 
?>
Kommt aber darauf an, wie Du die ein- und auslesen möchtest, beim Durchsuchen von Dateien ist es nicht zwingend erforderlich.

Code: Alles auswählen

<?php

$datei = fopen&#40;"abc.html", "r"&#41;; 
$muster = "/From&#58;&#40;.+&#41;<&#40;.+&#41;@&#40;&#91;-\w&#93;+&#41;\.&#40;&#91;a-z&#93;&#41;&#123;2,4&#125;>/i";

while &#40;!feof&#40;$datei&#41;&#41; &#123;
    
	$suche_in= fgets&#40;$datei, 1000&#41;;
	
	if &#40;stripos&#40;$suche_in, "from&#58;"&#41;!== false&#41; &#123;
	
		preg_match&#40;$muster, $suche_in, $ausgabe&#41;;	
		
		echo htmlspecialchars&#40;$ausgabe&#91;0&#93;&#41;."\n";
    &#125;	
&#125; 
fclose &#40;$datei&#41;;
?>
Habe jetzt mal beide Ausdrücke etwas abgewandelt, der letztere gefällt mir etwas besser, obwohl der erste Ausdruck genügen sollte.

13pixelchen
PostRank 5
PostRank 5
Beiträge: 243
Registriert: 06.10.2005, 21:53

Beitrag von 13pixelchen » 09.09.2012, 10:41

Habs nochmal abgewandelt zu /From: ((.+)@([-\w]+)\.([a-z>]){2,5})/i

13pixelchen
PostRank 5
PostRank 5
Beiträge: 243
Registriert: 06.10.2005, 21:53

Beitrag von 13pixelchen » 09.09.2012, 10:56

Allerdings tuts dann für .co.uk nicht.

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 09.09.2012, 13:36

13pixelchen hat geschrieben:Habs nochmal abgewandelt zu /From: ((.+)@([-\w]+)\.([a-z>]){2,5})/i
Bei Aufnahme von > in einer Zeichenklasse spielt die Reihenfolge der in der Zeichenklasse enthaltenen Zeichen keine Rolle mehr und der Teilausdruck würde auch mit .a>bcd übereinstimmen. Der Teilausdruck \.([a-z]){2,4}> passt hingegen nur auf .ab> bis .abcd>.

Damit der Ausdruck auch auf .co.uk passt, nimmst Du den Punkt noch einen Teilausdruck weiter vorn auf bei ([-.\w]+).

Die Datei abc.html enthält:

Code: Alles auswählen

Erste Zeile ...
From&#58; "abcöäü" <mail@mail-_mail.de>
Dritte Zeile ...
From&#58; "abcöäü" <mail@mail-_mail.co.uk>
Fünfte Zeile ...
Ausgabe getestet mit:

Code: Alles auswählen

<?php

$datei = fopen&#40;"abc.html", "r"&#41;; 
$muster = "/From&#58;&#40;.+&#41;<&#40;.+&#41;@&#40;&#91;-.\w&#93;+&#41;\.&#40;&#91;a-z&#93;&#41;&#123;2,4&#125;>/i";

while &#40;!feof&#40;$datei&#41;&#41; &#123;
    
	$suche_in= fgets&#40;$datei, 1000&#41;;
	
	if &#40;stripos&#40;$suche_in, "from&#58;"&#41;!== false&#41; &#123;
	
		preg_match&#40;$muster, $suche_in, $ausgabe&#41;;	
		
		echo htmlspecialchars&#40;$ausgabe&#91;0&#93;&#41;."<br>\n";
    &#125;	
&#125; 
fclose &#40;$datei&#41;;

/*
Ausgabe&#58; 

From&#58; "abcöäü" <mail@mail-_mail.de>
From&#58; "abcöäü" <mail@mail-_mail.co.uk>
*/
?>
Und was hast Du damit vor? Ich hoffe, ich helfe Dir hier nicht bei Schandtaten, die in einer Grauzone liegen.

13pixelchen
PostRank 5
PostRank 5
Beiträge: 243
Registriert: 06.10.2005, 21:53

Beitrag von 13pixelchen » 09.09.2012, 13:44

Ich will eingehende Mails automatisch in eine Datenbank kloppen. Ich habs geändert zu /From: ((.+)@([-\w]+)\.([a-z>\.])*)/i so das auch "From: mail@mail.de" erfasst wird, quasi einfach alles bis zum Ende der Zeile. Danke für Deine Hilfe. Tipp: https://www.myregextester.com/

Antworten