Seit ein paar Tagen vergnüge ich mich damit, das Mailinterface des Forums neuzuschreiben. Und verzweifele...

Laut RFC 822 (http://www.ietf.org/rfc/rfc0822.txt) ist das eine gültige Adresse:
    Gourmets:  Pompous Person <WhoZiWhatZit@Cordon-Bleu>,
               Childs@WGBH.Boston, 
               Galloping Gourmet@ANT.Down-Under (Australian National Television),
               Cheapie@Discount-Liquors;,
    Cruisers:  Port@Portugal, Jones@SEA;,
    Another@Somewhere.SomeOrg
(ich hab' das ein bischen umgestellt, um es übersichtlicher zu machen).

Und was macht die PHP mailparse-Erweiterung daraus?
Array(
  [0] => Array(
       [display] => Gourmets
       [address] => WhoZiWhatZit@Cordon-Bleu,Childs@WGBH.Boston,Galloping Gourmet@ANT.Down-Under,Cheapie@Discount-Liquors;            
       [is_group] => 1
   )
   [1] => Array(
       [display] => Cruisers:Port@Portugal
       [address] => Cruisers:Port@Portugal
       [is_group] => 
   )
   [2] => Array(
       [display] => Jones@SEA
       [address] => Jones@SEA
       [is_group] =>
   )
   [3] => Array(
       [display] => Another@Somewhere.SomeOrg
       [address] => Another@Somewhere.SomeOrg
       [is_group] => 
   )
)
Auf Deutsch: Die zweite Gruppenadresse (Cruisers:) ist völlig falsch verstanden worden.
Nun ist das nicht wirklich schlimm, weil Gruppenadressen - eines der besonders schrecklichen "Features" von RFC 822 - keine in irgendeiner Art nennenswerte Verbreitung haben, aber ich frage mich gerade allen Ernstes, wie man einen RFC-822 oder auch 2822-Parser zusammenbekommt, der *so* falsch arbeitet. Ich meine, ohne den ungehörigen Einsatz eines Zufallszahlengenerators kann das nicht passieren...

Davon ab ist natürlich das Verfahren, die Adressen innerhalb einer Gruppe dann einfach aneinander zu klatschen, natürlich auch nicht besonders schön. Und darüber hinaus ist das auch noch fehlerhaft gemacht, denn das Semicolon gehört nicht an das Ende einer Adresse. Und aus:
    whoziwhatzit@cordon-bleu,childs@wgbh.boston,galloping gourmet@ant.down-under,cheapie@discount-liquors;
macht der Parser das:
 Array
(
    [0] => Array
        (
            [display] => whoziwhatzit@cordon-bleu
            [address] => whoziwhatzit@cordon-bleu
            [is_group] => 
        )

    [1] => Array
        (
            [display] => childs@wgbh.boston
            [address] => childs@wgbh.boston
            [is_group] => 
        )

    [2] => Array
        (
            [display] => galloping gourmet@ant.down-under
            [address] => galloping gourmet@ant.down-under
            [is_group] => 
        )

    [3] => Array
        (
            [display] => cheapie@discount-liquors
            [address] => cheapie@discount-liquors
            [is_group] => 
        )

    [4] => Array
        (
            [display] => 
            [address] => 
            [is_group] => 
        )
Nun, zum Glück tun leere Adressen nicht wirklich weh...

Oder nehmen wir mal diese Adresse, aus RFC 2822:
    A Group: Chris Jones <c@a.test>,joe@where.test,John <jdoe@one.test>;
Aus der wird dies:
    [0] => Array
        (
            [display] => A Group
            [address] => c@a.test,joe@where.test,jdoe@one.test;
            [is_group] => 1
        )
Abgesehen vom uneleganten Zusammenklatschen und dem Semicolon ist das perfekt.

Aber wen das mit ein paar (durchaus korrekt gesetzten) Kommentaren garniert wird:
   A Group(some People): (one) Chris Jones <c@a.test>, (two) joe@where.test, (3) John <jdoe@one.test>;
kommt dann das heraus:
    [0] => Array
        (   
            [display] => A Group (some People):(one) Chris Jones
            [address] => c@a.test
            [is_group] =>
        )

    [1] => Array
        (   
            [display] => (two) joe@where.test
            [address] => joe@where.test
            [is_group] =>
        )

    [2] => Array
        (   
            [display] => (3) John
            [address] => jdoe@one.test
            [is_group] =>
        )

    [3] => Array
        (   
            [display] =>
            [address] =>
            [is_group] =>
        )

RFC 822 ist nun bereits 28 Jahre alt, daher irritiert es mich doch etwas, daß das immer noch nicht klappt.


Ihr wollt übrigens nicht wissen, was dieser Parser aus dem Beispiel auf Seite 47 des RFCs 2822 macht.
Oder wollt ihr?
Wenn nicht, bitte weg gucken. Aus:
   A Group(Some people)
     :Chris Jones <c@(Chris's host.)public.example>,
         joe@example.org,
       John <jdoe@one.test> (my dear friend); (the end of the group)
wird:
   [0] => Array
        (
            [display] => A Group (Some people):Chris Jones
            [address] => c@public.example
            [is_group] => 
        )

    [1] => Array
        (
            [display] => joe@example.org
            [address] => joe@example.org
            [is_group] => 
        )

    [2] => Array
        (
            [display] => John
            [address] => jdoe@one.test
            [is_group] => 
        )

    [3] => Array
        (
            [display] => (my dear friend)
            [address] => 
            [is_group] => 
        )

    [4] => Array
        (
            [display] => the end of the group
            [address] => 
            [is_group] => 
        )

Der Umgang mit den Kommentaren - (...) - muß auch irgendetwas mit Zufall zu tun haben :-(

Ich frage mich, wieso ich unerklärliche Fehler immer erst bei mir im Code suche...

Gruß, Uwe