AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] E-Mail-String parsen

Ein Thema von Matze · begonnen am 14. Sep 2008 · letzter Beitrag vom 18. Sep 2008
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 10:40
Hallo,

ich habe nun sehr lange herumprobiert und nachgeforscht, aber keine Möglichkeit gefunden, ohne großen Aufwand einen E-Mail-String zu parsen.
Dieser kann z.B. so aussehen:

Code:
1067 Return-Path: X-Original-To: [email]mail@domain.com[/email] Delivered-To: [email]abc@def.myserver.com[/email] Received: from mail.gmx.net (mail.gmx.net [213.165.164.203]) by [email]abc@def.myserver.com[/email] (Postfix) with SMTP id 00A9B420EDB3B for ; Sun, 14 Sep 2008 11:18:16 +0200 (CEST) Received: (qmail invoked by alias); 14 Sep 2008 09:18:14 -0000 Received: from p5B162543.dip.t-dialin.net (EHLO [192.168.178.241]) [91.222.167.99] by mail.gmx.net (mp045) with SMTP; 14 Sep 2008 11:18:14 +0200 X-Authenticated: #17560521 X-Provags-ID: V01U2FsdGVkX12bIAIDLTUbdOsRRVUoeN2u46Vpvt48ezOmwb1hVw ad4kl9ATYTyzNB Message-ID: <48CCD281.30703@gmx.de> Date: Sun, 14 Sep 2008 11:21:05 +0200 From: Matthias Hielscher User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) MIME-Version: 1.0 To: [email]mail@domain.com[/email] Subject: Test-Betreff Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 X-FuHaFi: 0.00 X-KasLoop: m0123cf6 Test-Nachricht ....
Mir würde Betreff + Nachricht + Absender reichen.

geht das mit regulären Ausdrücken? Denn ich kann irgendwie keine Regelmäßigkeit feststellen, nach der man das parsen könnte.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 10:48
Moin,

lass den String mal durch explode durchlaufen:
Code:
$data = explode("\n\r", $email_string);
Das sollte einiges einfacher machen

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 11:19
Hi Andy!

Tatsache, danke. Mit "\n" (ohne "\r") sieht das schon besser aus.

Ich vermute, dass ich dann die Einträge alle durchgehen schauen muss, welcher mit "Subject: " beginnt, um den Betreff zu erhalten. Ebenso beim Absender. Doch wie erhalte ich die eigentliche Nachricht?

Code:
...
[20] => Content-Transfer-Encoding: 7bit
[21] => X-Y-GMX-Trusted: 0
[22] => X-FuHaFi: 0.00
[23] => X-KasLoop: m0123cf6
[24] => Test-Nachricht
[25] => ....
[26] => Ciao
Grüße
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: [PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 11:37
Ich denke, dass RFC2822 weiterhelfen könnte, dort ist der "klassische" Aufbau von Emails beschrieben:
http://www.faqs.org/rfcs/rfc2822.html

Dort steht auch etwas über die Trennung von Header und Body:

Zitat:
The body is simply a sequence of characters that follows the header and is separated from the header by an empty line (i.e., a line with nothing preceding the CRLF).
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 15:10
Danke, aber das sieht sehr kompliziert aus.
Ich habe es nun so gelöst, dass ich die Regeln manuell festlege, bevor ich mich da ewig aufhalte:

Code:
$parser_beginnings = array(
   'date' => 'Date: ',
   'from' => 'From: ',
   'to' => 'X-Original-To: ',
   'subject' => 'Subject: ',
);

$parser_between_lines = array(
   'message' => array(
      'start_line' => 'X-KasLoop: ',
      'end_line' => '',
   ),
);
Nicht sonderlich schön, aber es geht und kann bei einem Serverumzug auch leicht angepasst werden. Ich rufe damit nur Mails ab, die an die aktuelle Domain adressiert werden, daher reicht mir dies aus.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: [PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 16:33
Moin Matze,

wenn du eine Mail nimmst und parst, kannst du sie erstmal am doppelten Umbruch splitten. Alles was vorher kommt sind Header, alles was nachher kommt ist Nachricht.
Anschliessend kannst du den Header nochmal an den einfachen Umbruechen splitten und dort das rauspicken, was du brauchst. Da kannst du dann jede Zeile am Trennzeichen (:) splitten, und hast den Namen des Headers und die Daten. Ist auf alle Faelle schneller und sicherer als mit preg_match() drueberzugehn.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [PHP] E-Mail-String parsen

  Alt 14. Sep 2008, 18:50
Hi,

das haut bei mir nicht hin. Die einzelnen Einträge werden übrigens mit "\r\n" getrennt und nicht mit "\n\r". Aber wenn ich

Code:
explode("\r\n\r\n", $mail_str);
aufrufe, erhalte ich nur ein Array-Item. Ich kann in der RFC-Beschreibung dazu auch nichts finden.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#8

Re: [PHP] E-Mail-String parsen

  Alt 18. Sep 2008, 15:46
Viele E-Mail-Clients halten sich leider nicht an den Standard... Du könntest evtl. zuerst einmal alle Zeilenumbrüche zu \n umwandeln und dann nach dem ersten Doppelumbruch suchen. Das sollte dann so funktionieren:
Code:
explode("\n\n", $mail_str, 2)
Simon Praetorius
Gruß
S2B
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [PHP] E-Mail-String parsen

  Alt 18. Sep 2008, 18:02
Hallo Simon,

danke. Da es mit meiner Lösung ganz gut funktioniert, lasse ich es vorerst einmal so. Da bin ich auch flexibler, wenn sich nicht jeder an den Standard halten sollte.

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz