String:Mailheader zerlegen???

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String:Mailheader zerlegen???

    Hallo!

    Habe hier nun schon einige Zeit gesucht nach Begriffen wie explode opder string zerlegen aber das richtige habe ich glaube ich nicht gefunden.

    ICh möchte aus diesem String:

    Return-Path: <x@gmx.de>
    Delivered-To: xxx@xxx.de
    Received: (qmail xxx invoked by uid 5001); 16 Dec 2002 10:21:10 -0000
    Delivered-To: xxx.de
    Received: (qmail xxx invoked from network); 16 Dec 2002 10:21:10 -0000
    Received: from pop.xxx.de (HELO mail.xxx.net) (xxx.xxx.xxxx)
    by xxx.de with SMTP; 16 Dec 2002 10:21:10 -0000
    Received: (qmail xxx invoked by uid 0); 16 Dec 2002 10:20:40 -0000
    Received: from dialin-xxx.arcor-ip.net (HELO xxx) (145.254.46.103)
    by mail.xxx.net (xxx) with SMTP; 16 Dec 2002 10:20:40 -0000
    From: "xxx" <xxx@gmx.de>
    To: <xxx@xxx.de>
    Subject: dddd
    Date: Mon, 16 Dec 2002 11:20:40 +0100
    Message-ID: <xxx@xxx>
    MIME-Version: 1.0
    Content-Type: multipart/alternative;
    boundary="----=_NextPart_000_0001_01C2A4F5.2B3AECE0"
    X-Priority: 3 (Normal)
    X-MSMail-Priority: Normal
    X-Mailer: Microsoft Outlook, Build 10.0.2627
    Importance: Normal
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000

    bestimme Variablen holen, wie FROM, TO, SUBJECT, DATE.

    Hat jemand eine Idee?

    Frohe Weihnachten

  • #2
    entweder du machst das mit REGEX

    oder einfach mit explode.....

    PHP-Code:

    $mailheadarr 
    explode("\r\n",$mailheader);

    // jetzt hast du ein array, in dem alle zeilen einzeln stehen.
    // dies dann nur noch mittels for schleife durchlaufen lassen.

    // innerhalb der schleife musst du prüfen, ob z.b. [b]FROM:[/b] enthalten ist.
    // dann kannst du das machen, was du willst. 
    diese lösung ist zwar nicht soooooo schön, funktioniert aber auch ohne regex.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      habe das mal so versucht:

      $headerarray = explode("\r\n",$header);
      $i_max=count($headerarray);

      for($i=0;$i<$i_max;$i++)
      {
      echo"$headerarray[$i]<br>";
      }

      allerdings zeigt er mir nun nicht mehr das komplette FROM an

      From: "xxx" <xxx@gmx.de>

      sondern nur

      From: "xxx"

      Kommentar


      • #4
        dürfte er eigentlich nicht machen....


        du kannst aber noch was anderes probieren. bevor du explodest, ersetze alle \r\n durch \n

        also

        PHP-Code:
        $mailheader str_replace ("\r\n""\n"$mailheader); 
        danach machst du das explode nach \n also explode("\n",.....

        wenn das dann nicht klappt bin ich ratlos.....
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          So nun schreibt er mir alles hin nur halt ohne die <> zeichen aber wenigstens den Inhalt! Ich habe ja nun alles Zeilenweise da stehen also:

          From: "xxx" xxx@gmx.de
          To: xxx@xxx.de
          Subject: testresff
          Date: Mon, 16 Dec 2002 12:20:22 +0100

          Aber wie kann ich nun die fromzeile als variable bestimmen bzw. wie meinst du das mit dem herausfiltern, den die arraysätze kann ich ja nicht abzählen da es immer verschieden viele seien können!


          SO sieht es jetzt aus:
          $header = str_replace ("\r\n", "\n", $header);
          $header = str_replace ("<", "", $header);
          $header = str_replace (">", "", $header);
          $headerarray = explode("\n",$header);
          $i_max=count($headerarray);

          for($i=0;$i<$i_max;$i++)
          {
          echo"$headerarray[$i]<br>";
          }

          Kommentar


          • #6
            jetzt weiss ich warum vorhin nicht alles da stand.

            das < oder > schliesst ja meist den namen eines tags in html ein.
            das hat er wohl so erkannt. du hättest die ausgabe mittelns htmlentities() machen müssen ...

            das FROM kannst du immer so finden.....
            das klappt auch mit den anderen schlüsselwörtern.

            PHP-Code:
            $header str_replace ("\r\n""\n"$header);
            $headerarray explode("\n",$header);

            $i_max=count($headerarray);
            for(
            $i=0;$i<$i_max;$i++) 
            {
              echo
            "$headerarray[$i]<br>";
              if (
            ereg("FROM: ",$headerarray[$i])) { echo "habe den <b>rosa absender</b> gefunden.<br>"; }

            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Soweit klappt das wunderbar!

              sieht jetzt so aus:

              PHP-Code:
                      $header str_replace ("\r\n""\n"$header);
                      
              $header str_replace ("<"""$header);
                      
              $header str_replace (">"""$header);
                       
              $headerarray explode("\n",$header);
                        
              $i_max=count($headerarray);
                      
                      for(
              $i=0;$i<$i_max;$i++) 
                      {
                          
              //echo"$headerarray[$i]<br>";
                            
              if (ereg("From: ",$headerarray[$i])) 
                          { 
                          
              $from=$headerarray[$i];
                          }
                            if (
              ereg("To: ",$headerarray[$i])) 
                          { 
                          
              $to=$headerarray[$i];
                          }            
                            if (
              ereg("Subject: ",$headerarray[$i])) 
                          { 
                          
              $subject=$headerarray[$i];
                          }        
                            if (
              ereg("Date: ",$headerarray[$i])) 
                          { 
                          
              $date=$headerarray[$i];
                          }                        
                      }

                       
              $fromarray explode(" ",$from);
                        
              $i_max=count($fromarray);
                      
                      for(
              $i=0;$i<$i_max;$i++)     
                      {
                          
              //echo"$fromarray[$i]<br>";
                          
              if (ereg("@",$fromarray[$i])) 
                          { 
                          
              $mailadresse_von=$fromarray[$i];
                          }
                          if (
              ereg("From:",$fromarray[$i])) 
                          { 
                          
              $mailadresse_from=$fromarray[$i];
                          }
                          else
                          {
                          
              $mailadresse_name=$fromarray[$i];
                          }
                      } 
              wenn ich nun aber das from nochmal zerlege nach leerzeichen wird aus

              From: "Herr Test" test@test.de / From: Herr Test test@test.de

              1. From: / From:
              2. "Herr / Herr
              3. Test" / Test
              4. test@test.de / test@test.de


              und der else fall liefert mir leider nicht fall 2 und 3 zusammen! Die MAiladresse habe ich so ja nun, das ist auch schon sehr gut nur würde jetzt der Name noch ein kleiner Bonus sein ;-)
              Zuletzt geändert von oli007; 23.12.2002, 22:19.

              Kommentar


              • #8
                mache bitte mal die PHP tags um deinen code. vorher schaue ich mir das nicht an.
                post bitte, wenn gemacht.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  sorry! habe ich nun auch entdeckt;-)

                  Kommentar


                  • #10
                    Original geschrieben von oli007
                    sorry! habe ich nun auch entdeckt;-)
                    danke. keine problem. nur kann man den code halt nicht mehr lesen.

                    trenne doch einfach nach 'From: '

                    oder noch besser.

                    PHP-Code:
                    $from str_replace("From: """$from); 
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      jo dann habe ich Form weg ist auch ok aber ich möchte dann ja sowas haben:

                      var1: Herr Test
                      var2: test@test.de

                      irgendwie sehe ich das jetzt wohl nicht :-(

                      Kommentar


                      • #12
                        ist nicht schön.
                        aber trenne nach '<'
                        löschen dann im 2. part das >
                        und mache eine trim() auf den 1. part.

                        ist jetzt etwas umständlich.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          ich kann mich auch irren. aber gibt es nicht in php schon funktionen, die so einen header verarbeiten können?

                          hattest du auch schon mal bei den codeschnippseln vorbeigeschaut?
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            jo hatte ich!

                            wollte das eben mal so versuchen:

                            PHP-Code:
                                        if (not ereg("@",$fromarray[$i])) 
                                        { 
                                        
                            $mailadresse_name=$fromarray[$i];
                                        }        
                                        if (
                            ereg("@",$fromarray[$i])) 
                                        { 
                                        
                            $mailadresse_von=$fromarray[$i];
                                        } 
                            aber not ereg gibet nicht ! schade auch!

                            aber wie meinst du das mit trim und <, die <> habe ich doch nicht mehr?

                            Kommentar


                            • #15
                              klar. die <> hattest du ja schon oben gekillt.

                              ich habe hier was, was gehen sollte.

                              PHP-Code:
                              $from_email array_pop(explode(" "$from));
                              $from_name  trim(str_replace($from_email""$from)); 
                              frag nicht. es sollte funktionieren. schaue dir die fkts unter php.net an.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X