Ingo Siemon: Zeilenumbruch bei E-Mail per PHP

Hallo

Folgender Code:

  
$herkunft = "Referer: " . $HTTP_REFERER . "Angeforderte Seite: " . htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES);  
mail("xx@meinedomain.de", "Fehler", $herkunft, $headers);

Wie bekomme ich denn da nun Zeilenumbrüche nach "Referer: "
und "Angeforderte Seite: " hinein?
Ich habe es mit /n versucht, das klappt aber nicht.

Der Text der E-Mail soll dann so aussehen:
Referer:
blablablabla

Angeforderte Seite:
blablablabla

Da ich mir nun schon ne Weile einen Wolf suche,
würde ich mich sehr freuen, wenn mir jemand mal einen
Schlag vor den Kopp geben könnte, damit ich weis
wonach ich suchen muss ;-)

Gruß
Ingo

  1. Hallo Ingo.

    Wie bekomme ich denn da nun Zeilenumbrüche nach "Referer: "
    und "Angeforderte Seite: " hinein?
    Ich habe es mit /n versucht, das klappt aber nicht.

    Klar, du suchst ja auch nicht die Zeichenkette „/n“ sondern das Steuerzeichen „\n“ auch L(ine)F(eed) genannt.
    (Der Backslash dient stets dem Maskieren von Zeichen.)

    Einen schönen Dienstag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    mathbr:del.icio.us/ mathbr:w00t/
    1. Hallo Ashura

      Klar, du suchst ja auch nicht die Zeichenkette „/n“ sondern das Steuerzeichen „\n“ auch L(ine)F(eed) genannt.
      (Der Backslash dient stets dem Maskieren von Zeichen.)

      Ups, klar, das war aber nur ein Schreibfehler in meinem Posting.
      Ich habe es natürlich mit „\n“ versucht.
      Aber das klappt eben nicht.

      Gruß
      Ingo

      1. Hallo Ingo.

        Ich habe es natürlich mit „\n“ versucht.
        Aber das klappt eben nicht.

        Wie sieht der vollständige Code deiner Mailfunktion aus? (Mit einem Beispieltext, wie du ihn versandt haben möchtest.)

        Und hast du in deinem Mailclient die Plaintext-Ansicht aktiviert?

        Einen schönen Dienstag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        mathbr:del.icio.us/ mathbr:w00t/
        1. Hallo

          Der Code sieht so aus:

            
              <?php  
                $herkunft = "Referer:\n" . $HTTP_REFERER . "\n\nAngeforderte Seite:\n" . htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES);  
                $headers .= 'From:' . "xxx@mainedomain.xx" . "\n";  
                $headers .= "Content-type: text/html\n";  
                mail("xxx@mainedomain.xx", "Fehler", $herkunft, $headers);  
              ?>  
          
          

          Die Mail soll so versandt werden:

          Referer:
          http://www.trallala.de/trallalu/links.htm

          Angeforderte Seite:
          /_Test2/listen/modelle-erotik-a.htm

          Gruß
          Ingo

          1. Hallo Ingo.

            $herkunft = "Referer:\n" . $HTTP_REFERER . "\n\nAngeforderte Seite:\n" . htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES);

            Meinst du nicht eigentlich $_SERVER['HTTP_REFERER'] an Stelle von $HTTP_REFERER?

            ~~~php

            $headers .= 'From:' . "xxx@mainedomain.xx" . "\n";

            $headers .= "Content-type: text/html\n";

              
            Du hängst hier zwei mal Inhalte an $headers an, doch wo wird diese Variable initialisiert?  
              
            
            > Die Mail soll so versandt werden:  
              
            Du hast [error_reporting](http://de2.php.net/manual/de/function.error-reporting.php) auf E\_ALL gestellt?  
            Du lässt dir die Mail als Plaintext in deinem Mailclient anzeigen?  
              
              
            Einen schönen Dienstag noch.  
              
            Gruß, Ashura  
            
            -- 
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|  
            [<mathbr:del.icio.us/>](http://del.icio.us/mathbr) [<mathbr:w00t/>](http://w00t.noctus.net)
            
            1. Hallo

              Meinst du nicht eigentlich $_SERVER['HTTP_REFERER'] an Stelle von $HTTP_REFERER?

              Ja.

              Du hängst hier zwei mal Inhalte an $headers an, doch wo wird diese Variable initialisiert?

              Ups ja, also so:

                
                    $headers = 'From:' . "mail@spaceart.de" . "\n";  
                    $headers .= "Content-type: text/html\n";  
              
              

              Du hast error_reporting auf E_ALL gestellt?

              Das übersteigt meine PHP-Fähigkeiten leider noch.
              Ich fange das gerade erst an.
              Ich habe mir den Link mal angschaut,
              aber das verstehe ich leider nicht.

              Ich habe mal einfach "error_reporting(E_ALL);" als letzte Zeile
              in den PHP-Code geschrieben. Aber da wird nichts angezeigt.

              Du lässt dir die Mail als Plaintext in deinem Mailclient anzeigen?

              Ja.

              Gruß
              Ingo

              1. Hallo Ingo.

                Ich habe mal einfach "error_reporting(E_ALL);" als letzte Zeile
                in den PHP-Code geschrieben. Aber da wird nichts angezeigt.

                Ja, jetzt wird da nichts mehr angezeigt. Zuvor hättest du folgendes erhalten:

                Notice: Undefined variable: HTTP_REFERER in … on line …

                Notice: Undefined variable: headers in … on line …

                Du lässt dir die Mail als Plaintext in deinem Mailclient anzeigen?

                Ja.

                Tja, dann weiß ich leider kaum noch einen Rat.
                Kannst du mir einmal eine solche Mail an meine Adresse zuschicken? Ich möchte sehen, ob die Zeilenumbrüche korrekt übertragen werden.

                Einen schönen Dienstag noch.

                Gruß, Ashura

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                mathbr:del.icio.us/ mathbr:w00t/
            2. Hallo nochmal

              Ich habs!

              Bisher: $headers .= "Content-type: text/html\r\n";
              Nun: $headers .= "Content-type: text\r\n";

              So klappts.
              Danke für Eure nette und schnelle Hilfe!

              Gruß
              Ingo

          2. Hi,

            Der Code sieht so aus:

            <?php
                  $herkunft = "Referer:\n" . $HTTP_REFERER . "\n\nAngeforderte Seite:\n" . htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES);
                  $headers .= 'From:' . "xxx@mainedomain.xx" . "\n";
                  $headers .= "Content-type: text/html\n";
                  mail("xxx@mainedomain.xx", "Fehler", $herkunft, $headers);
                ?>

            
            >   
              
            Zwei Anmerkungen:  
              
            1\. Laut PHP Manual sollten Angaben in $headers durch "\r\n" getrennt werden  
            also  
            $headers .= 'From:' . "xxx@mainedomain.xx" . "\r\n";  
            
            >       $headers .= "Content-type: text/html";  
              
              
            2\. Ich habe es nur geschaft in dem ich eine Tabelle aufgebaut habe  
            also  
             $herkunft = "<table><tr><td>Referer:</td></tr>" . "<tr><td>" .$HTTP\_REFERER . "</td></tr><tr><td>Angeforderte Seite:</td></tr><tr><td>" . htmlspecialchars($\_SERVER['REQUEST\_URI'], ENT\_QUOTES). "</td></tr></table>;  
              
            Nicht elegant aber es klappt einwandfrei  
              
            Gruss  
              
            Maulwurf  
              
              
             
            
            1. Hallo maulwurf.

              1. Laut PHP Manual sollten Angaben in $headers durch "\r\n" getrennt werden

              Absolut wichtiger Hinweis.

              1. Ich habe es nur geschaft in dem ich eine Tabelle aufgebaut habe
                […]

              Nicht elegant aber es klappt einwandfrei

              Nicht nur nicht elegant, sondern praktisch überflüssig und bei einigen Clients sogar problematisch. Nicht jeder Mailclient kann / soll / darf HTML in E-Mails interpretieren.

              Sofern die Zeilenumbrüche korrekt in der E-Mail versandt werden (Quelltext der Mail anschauen), kann nur noch ein (Konfigurations)Fehler im Mailclient vorliegen.

              Einen schönen Dienstag noch.

              Gruß, Ashura

              --
              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
              mathbr:del.icio.us/ mathbr:w00t/
              1. Hi,

                Sofern die Zeilenumbrüche korrekt in der E-Mail versandt werden (Quelltext der Mail anschauen), kann nur noch ein (Konfigurations)Fehler im Mailclient vorliegen.

                Siche hängt es von Mailcient ab. In meinen Fall war Outlook der Empfänger. Nach viel rumprobieren war diese absolut schweinische Lösung (ohne die Schweine beleidigen zu wollen) die einzige die geholfen hat

                Gruss

                Maulwurf

                1. Moin!

                  Sofern die Zeilenumbrüche korrekt in der E-Mail versandt werden (Quelltext der Mail anschauen), kann nur noch ein (Konfigurations)Fehler im Mailclient vorliegen.

                  Siche hängt es von Mailcient ab. In meinen Fall war Outlook der Empfänger. Nach viel rumprobieren war diese absolut schweinische Lösung (ohne die Schweine beleidigen zu wollen) die einzige die geholfen hat

                  Hast du nicht <br> ausprobiert?

                  - Sven Rautenberg

                  --
                  My sssignature, my preciousssss!
                  1. Hi,

                    Hast du nicht <br> ausprobiert?

                    doch aber es hat nichts gebracht. Outlook reagiert etwas merkwürdig.
                    Es kann aber sein, das es an der Einstellungen liegt(Firmeninternes Mail)

                    gruss

                    Maulwurf

            2. Hallo Maulwurf

              1. Laut PHP Manual sollten Angaben in $headers durch "\r\n"

              getrennt werden

              OK, das habe ich korrigiert.
              Danke für den Hinweis.

              Nicht elegant aber es klappt einwandfrei

              Aber das müsste doch auch ohne Tabelle machbar sein.
              Vor allem, weil ich keine html-Mail versenden will.

              Gruß
              Ingo

              1. Hi,

                Aber das müsste doch auch ohne Tabelle machbar sein.
                Vor allem, weil ich keine html-Mail versenden will.

                warum dann Content-type: text/html anstatt Content-type: text/plain?

                Gruss

                Maulwurf

                1. Lieber Maulwurf

                  warum dann Content-type: text/html anstatt Content-type: text/plain?

                  Yep, genau das war die Lösung.
                  Danke und Gruß aus Münster
                  Ingo

          3. Hi,

            $headers .= "Content-type: text/html\n";

            $headers .= "Content-type: text/plain\r\n";
            wenns kein html sein soll...

            Gruesse, Joachim

            --
            Am Ende wird alles gut.
            1. Lieber Joachim

              $headers .= "Content-type: text/html\n";
              $headers .= "Content-type: text/plain\r\n";
              wenns kein html sein soll...

              Ja, das ar genau die Lösung.
              Danke.

              Gruß
              Ingo

  2. Hi there,

    Wie bekomme ich denn da nun Zeilenumbrüche nach "Referer: "
    und "Angeforderte Seite: " hinein?
    Ich habe es mit /n versucht, das klappt aber nicht.

    am besten, Du hängst mit chr(13).chr(10) eine CarriageReturn Linefeed an , als $string.chr(13).chr(10) bewirkt einen Zeilenumbruch...

    1. Moin!

      am besten, Du hängst mit chr(13).chr(10) eine CarriageReturn Linefeed an , als $string.chr(13).chr(10) bewirkt einen Zeilenumbruch...

      Ja, das ist die Variante für Leute, die keinen Gegenschrägstrich auf ihrer Tastatur haben. Obiges kannst du billiger haben:

      $string . "\xD\xA"

      Viele Grüße,
      Robert

      1. Moin!

        am besten, Du hängst mit chr(13).chr(10) eine CarriageReturn Linefeed an , als $string.chr(13).chr(10) bewirkt einen Zeilenumbruch...

        Ja, das ist die Variante für Leute, die keinen Gegenschrägstrich auf ihrer Tastatur haben. Obiges kannst du billiger haben:

        $string . "\xD\xA"

        Und das wiederum geht noch einfacher mit
        $string . "\r\n"

        \r ist in PHP definiert als ASCII 13.
        \n ist in PHP definiert als ASCII 10.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Moin!

          $string . "\xD\xA"

          Und das wiederum geht noch einfacher mit
          $string . "\r\n"

          \r ist in PHP definiert als ASCII 13.
          \n ist in PHP definiert als ASCII 10.

          Das ist gut zu wissen, ich dachte, \n wäre wie in C plattform-abhängig.

          Viele Grüße,
          Robert