Linuchs: PHP: Mailadresse mit Unterstrich

0 39

PHP: Mailadresse mit Unterstrich

Linuchs
  • php
  1. 0
    me-too
    1. 0
      Linuchs
      1. 0
        Raktenpoststelle
        1. 0
          Raktenpoststelle
          1. 0
            Linuchs
            1. 0
              Auge
      2. 0
        Tabellenkalk
        1. 0
          Linuchs
          1. 0
            me-too
            • e-mail
            • php
            • server
      3. 0
        Der Martin
        1. 0
          Tabellenkalk
          1. 0
            Der Martin
            1. 0
              me-too
              • e-mail
              • php
              • server
              1. 0

                PHP: Mail wird nicht gesendet. Headerfehler?

                me-too
                1. 0
                  Raketenfehlersuchtrupp
                  1. 0
                    me-too
                    1. 2
                      Julius
                      1. 0

                        Quelltext: danke!

                        me-too
                        • danke
      4. 0
        Raketenfehlersuchtrupp
        1. 0
          Zwei Tests bei denen die Mails definitiv ankommen
          1. 2

            Entkäfern durch einen simplen Test...

            Raketenfehlerzeiger
      5. 2
        klawischnigg
        1. 4
          Julius
          1. -1

            Kirchen, Dörfer, Aktienkurse

            Raktetenwilli
            • performance
            • programmiertechnik
            • sicherheit
            1. 0

              Augenmaß (+1)

              me-too
              • datenschutz
              • programmiertechnik
              • sicherheit
              1. 0
                Der Martin
              2. 5
                dedlfix
            2. 3
              Julius
              1. 0
                Raketenkonstrukteur
                1. 1
                  Julius
                2. 0
                  Der Martin
                  • logistik
                  • sarkasmus
  2. 0
    Der Martin
    • e-mail
    • php
    1. 0
      Auge
      • e-mail
      • markdown
      • php
      1. 0
        Rolf B
      2. 1
        Gunnar Bittersmann
        • markdown
        1. 0
          Rolf B
          1. 0
            Gunnar Bittersmann
        2. 0
          Auge

Moin,

per PHP versende ich Mails. Eine Mail-Adresse lautet wie vorname_nachnam@example.org Die kann PHP nicht senden.

Mit dem Thunderbird klappt es aber. Soweit ich weiß, ist der Unterstrich doch ein gültiges ASCII-Zeichen. Muss das für PHP gesondert codiert werden?

Linuchs

  1. Hi Linuchs,

    per PHP versende ich Mails. Eine Mail-Adresse lautet wie vorname_nachnam@example.org Die kann PHP nicht senden.

    Mit dem Thunderbird klappt es aber. Soweit ich weiß, ist der Unterstrich doch ein gültiges ASCII-Zeichen. Muss das für PHP gesondert codiert werden?

    Wie hast Du das denn verifiziert, dass PHP daran Schuld ist?

    Hast Du mal ein ganz einfaches Testskript gebaut?

    LG
    me-too

    1. Wie hast Du das denn verifiziert, dass PHP daran Schuld ist?

      $mail_to = mb_encode_mimeheader ( "vorname_nachnam@example.org" );
      mb_language ( 'uni' );  // UTF-8
      $result = mail( $mail_to, $mail_subject, $mail_body, $mail_header );  // TRUE oder FALSE
      

      Linuchs

      1. Es kommt auch auf das Ergebnis an…

        Wie offenbart sich denn, dass PHP das nicht senden kann?

        1. Habs gerade getestet. Bei mir behauptet PHP, „dass die E-Mail erfolgreich für den Versand akzeptiert wurde“.

          1. „dass die E-Mail erfolgreich für den Versand akzeptiert wurde“

            Wie entlockst du dem mail-Kommando diese Information? Ich bekomme TRUE oder FALSE lt. Handbuch:

            Mail

            1. Hallo

              „dass die E-Mail erfolgreich für den Versand akzeptiert wurde“

              Wie entlockst du dem mail-Kommando diese Information? Ich bekomme TRUE oder FALSE lt. Handbuch

              Ja eben. Er hat TRUE zurückbekommen und fast wortgetreu den laut deinem eigenen Screenshot passenden Satz der Doku wiedergegeben.

              Mail

              Tschö, Auge

              --
              Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
              Hohle Köpfe von Terry Pratchett
      2. Hallo,

        
        mb_language ( 'uni' );  // UTF-8
        $result = mail( ...
        

        wenn du mb_language setzt, warum nutzt du dann nicht mb_send_mail?

        Gruß
        Kalk

        1. wenn du mb_language setzt, warum nutzt du dann nicht mb_send_mail?

          Weiß ich nicht mehr, habe es probiert, Mail wird nicht gesendet.

          1. Hi,

            wenn du mb_language setzt, warum nutzt du dann nicht mb_send_mail?

            Weiß ich nicht mehr, habe es probiert, Mail wird nicht gesendet.

            Hast Du denn nun mal eine ganz stinknormale Testmail in das Testskript eingefügt ohne zusätzliche Mailheaders oder sonstigen Schnickschnack?

            Was liefert mb_send_mail() dann zurück?

            Du arbeitest auf Linux?
            Ist das Linux-Mailskript in der Konfiguration ordnungsgemäß gesetzt und für PHP erreichbar und ausführbar?

            Wenn man die Headers falsch terminiert können manche SMTP-Server das nicht verkraften. Da müsste es dann aber einen Eintrag in mail.err geben. Kommst Du da dran?

            LG
            me-too

      3. Hallo,

        Wie hast Du das denn verifiziert, dass PHP daran Schuld ist?

        $mail_to = mb_encode_mimeheader ( "vorname_nachnam@example.org" );
        mb_language ( 'uni' );  // UTF-8
        $result = mail( $mail_to, $mail_subject, $mail_body, $mail_header );  // TRUE oder FALSE
        

        wenn mail() als Ergebnis FALSE liefert, heißt das nur, dass sendmail (oder der entsprechende Wrapper) "Nö!" gesagt hat. Das ist dann aber kein Fehler oder Versagen von PHP.

        Btw, was macht denn mb_encode_mimeheader() aus dem Unterstrich? Hast du dir das mal angeschaut?

        Live long and pros healthy,
         Martin

        --
        Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
        1. Hallo,

          sendmail (oder der entsprechende Wrapper)

          Der "entsprechende Wrapper" ist hier mb_send_mail? Ist "Wrapper" hier synonym zu "Alias" oder passiert da noch mehr?

          Gruß
          Kalk

          1. Hallo,

            sendmail (oder der entsprechende Wrapper)

            Der "entsprechende Wrapper" ist hier mb_send_mail?

            nein, ich meinte das, was außerhalb von PHP läuft. Also entweder das klassische Unix-Tool sendmail, oder ein gleichnamiges Shell-Script, das die gleiche Schnittstelle bietet, aber ein ganz anderes Programm aufruft.

            Ist "Wrapper" hier synonym zu "Alias" oder passiert da noch mehr?

            Je nachdem. ;-)

            Live long and pros healthy,
             Martin

            --
            Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
            1. Hi,

              mb_send_mail() wäre z.B. der Wrapper für sendmail, was seinerseits wieder ein Wrapper für die SMTP-Funktion von EXIM oder Postfix o.a. wäre.

              Sowohl die PHP-Mailfunktionen, als auch das Sendmail-Skript manipulieren an den Header-Abschlüssen herum, sodass diese dann bei richtiger Kettenreaktion auf CRLF enden, wie es die RFCs für Email fordern.

              Bei Windows wird direkt der eingestellte SMTP-Port angesprochen. Da fällt deshalb die Manipulation durch ein Semdmail-Skript weg. Das gibts da nicht.

              Was man nun auf einem Linux-Host selber verwenden muss, wenn man die Header als Stringwurst (also nicht als Array) übergibt, weiß ich nicht mehr. Ich nutze immer die Arrayvarianten; da macht PHP das von alleine richtig.

              Wenn also die Mailfunktionen TRUE liefern, aber trotzdem nichts gesendet wird, kann das an den Headern liegen.

              LG
              me-too

              1. Hi,

                Wenn also die Mailfunktionen TRUE liefern, aber trotzdem nichts gesendet wird, kann das an den Headern liegen.

                Nachtrag:

                nimm nur \n. Der mail()-Wrapper und der mb_send_mail()-Wrapper passen das automatisch für Linux (\n) und für Windows (\r\n) an.

                Manche Sendmail-Skripte sind aber so doof, dass sie ein geliefertes \r\n in zwei davon zerlegen. Das führt dann dazu, dass der SMTP-Server das dann nicht mehr verstehen kann. Denn zwei CRLF hintereinander bedeuten "EoH" Ende der Header. Da beginnt dann der Mailbody.

                LG
                me-too

                1. Manche Sendmail-Skripte sind aber so doof, dass sie ein geliefertes \r\n in zwei davon zerlegen. Das führt dann dazu, dass der SMTP-Server das dann nicht mehr verstehen kann. Denn zwei CRLF hintereinander bedeuten "EoH" Ende der Header. Da beginnt dann der Mailbody.

                  Was man sehr gut daran erkennt, dass die so gesendeten Headerzeilen dann im Body des hoffentlich empfangenen Mails auftauchen...

                  Bei Windows wird direkt der eingestellte SMTP-Port angesprochen. Da fällt deshalb die Manipulation durch ein Semdmail-Skript weg. Das gibts da nicht.

                  Dafür aber einen Abschnitt in der php.ini:

                  [mail function]
                  ; For Win32 only.
                  ; http://php.net/smtp
                  SMTP = localhost
                  ; http://php.net/smtp-port
                  smtp_port = 25
                  
                  ; For Win32 only.
                  ; http://php.net/sendmail-from
                  ;sendmail_from = me@example.com
                  
                  ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
                  ; http://php.net/sendmail-path
                  ;sendmail_path =
                  
                  ; Force the addition of the specified parameters to be passed as extra parameters
                  ; to the sendmail binary. These parameters will always replace the value of
                  ; the 5th parameter to mail().
                  ;mail.force_extra_parameters =
                  
                  ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
                  mail.add_x_header = Off
                  
                  ; The path to a log file that will log all mail() calls. Log entries include
                  ; the full path of the script, line number, To address and headers.
                  ;mail.log =
                  ; Log mail to syslog (Event Log on Windows).
                  ;mail.log = syslog
                  

                  Die angegebene URL http://php.net/smtp leitet (mich) weiter zu https://www.php.net/manual/de/mail.configuration.php#ini.smtp

                  1. Hi,

                    interessanter ist der Quelltext von mail() und mb_send_mail().

                    Ich habe aber leider im Moment keinen Zugriff darauf. Steht der eigentlich irgendwo per http erreichbar bzw. in html/css ausgezeichnet im Netz?

                    LG
                    me-too

                    1. Hallo me-too,

                      interessanter ist der Quelltext von mail() und mb_send_mail().

                      Ich habe aber leider im Moment keinen Zugriff darauf. Steht der eigentlich irgendwo per http erreichbar bzw. in html/css ausgezeichnet im Netz?

                      Gruß
                      Julius

                      1. Hi Julius,

                        danke.

                        LG
                        me-too

      4. Wirklich?

        $mail_to = mb_encode_mimeheader ( "vorname_nachnam@example.org" );
        mb_language ( 'uni' );  // UTF-8
        

        Da wäre schon die Reihenfolge falsch. Und warum sollte die eigentlich Mailadresse mit mb_encode_mimeheader() bearbeitet werden?

        Müsste das nicht so gehen:

        $mailadress_name = 'Ö. Dipus';
        $mailadress = oe_dipus@example.com
        
        mb_language ( 'uni' );  // UTF-8
        
        $mail_to = mb_encode_mimeheader ($mailadress_name) 
                 . '<'
                 . $mailadress
                 . '>';
        
        $result = mail( $mail_to, $mail_subject, $mail_body, $mail_header );  //
        
        1. <?php
          
          $mailadress_name = 'Mön schöne Name';
          $mailadress = 'meine_adresse@example.com';
          
          mb_language ( 'uni' );  // UTF-8
          
          $mail_to = mb_encode_mimeheader ($mailadress_name) 
                   . '<'
                   . $mailadress
                   . '>';
          
          echo "Sende mail an $mail_to\n";
          
          $result = mail( $mail_to, 'Hallo', 'Hallo Welt', 'From: meine_adresse@example.com' );
          if ( $result ) {
            echo "php hat gesendet\n";
          } else {
            echo "php hat nicht gesendet\n";
          }
          

          Test2:

          <?php
          
          $mailadress_name = 'Mön schöne Name';
          $mailadress = 'meine_adresse@example.com';
          
          mb_language ( 'uni' );  // UTF-8
          
          $mail_to = mb_encode_mimeheader ($mailadress_name) 
                   . '<'
                   . $mailadress
                   . '>';
          
          echo "Sende mail an $mail_to\n";
          
          $result = mb_send_mail( $mail_to, 'Hallo', 'Hallo Welt', 'From: meine_adresse@example.com' );
          if ( $result ) {
            echo "php hat gesendet\n";
          } else {
            echo "php hat nicht gesendet\n";
          }
          

          Beide Mails kamen an. Ich vermute die Ursache darin, dass Du die eigentliche Maildresse durch mb_encode_mimeheader „gejagt“ hast.

          Da kommt - jedenfalls mit Unterstrich - „Murks“ raus.

          Schau mal nach /var/log/exim4 was sich dort getan hat.

          1. Ich vermute die Ursache darin, dass Du die eigentliche Maildresse durch mb_encode_mimeheader „gejagt“ hast.

            Getestet:

            <?php
            $adds=[
            	'foo.bar@example.com',
            	'foo-bar@example.com',
            	'foo_bar@example.com'
            ];
            	
            
            foreach ( $adds as $s ) {
              echo '"' 
                   . $s 
                   . '" :: "' 
                   . mb_encode_mimeheader( $s )
                   . '"'
                   . PHP_EOL;
            }
            

            output:

            "foo.bar@example.com" :: "foo.bar@example.com"
            "foo-bar@example.com" :: "foo-bar@example.com"
            "foo_bar@example.com" :: "=?UTF-8?B?Zm9vX2JhckBleGFtcGxlLmNvbQ==?="
            

            Damit ist klar, warum das Mail nicht ankommen kann. Der Mailer denkt dann nämlich "Kein @?- Also an den lokalen Server!"

            Gesamtresultat:

            =?UTF-8?B?Zm9vX2JhckBleGFtcGxlLmNvbQ==?=@lokalerName
            
      5. Hi there,

        Wie hast Du das denn verifiziert, dass PHP daran Schuld ist?

        $mail_to = mb_encode_mimeheader ( "vorname_nachnam@example.org" );
        mb_language ( 'uni' );  // UTF-8
        $result = mail( $mail_to, $mail_subject, $mail_body, $mail_header );  // TRUE oder FALSE
        

        Hast Du vor dem Versenden den Wert der Variablen $mail_to einmal ausgeben lassen? Funktioniert das Versenden mit den gleichen Daten aber mit anderem Adressaten? Vor allem - die Funktion mail() ist nur für ganz kleine und unwichtige Projekte zu gebrauchen. Die kann aus den verschiedensten Gründen nicht funktionieren und FALSE zurückliefern. Besser man verwendet zB die send-Funktion der PEAR-Erweiterung, die liefert auch konkretere Ergebnisse zurück, warum's nicht funktioniert hat...

        1. Hallo klawischnigg,

          Besser man verwendet zB die send-Funktion der PEAR-Erweiterung, die liefert auch konkretere Ergebnisse zurück, warum's nicht funktioniert hat...

          Oder alternativ:

          @Linuchs Es hat sich als sehr schlechte Idee erwiesen, mit der mail-Funktion selbst herumzuoperieren. Da baut man sich schnell üble Sicherheitslücken ein, die E-Mail-Injections ermöglichen. Dieses Problem lagert man an die Bibliothek aus, deren Aufgabe es ist die Empfängeradressen und Betreffzeilen vor dem Versand korrekt zu behandeln.

          Gruß
          Julius

          1. Bitte, lasst Die Kirche auch mal im Dorf!

            (Ich weiß wem mein Einwand nicht gefallen wird)

            In sehr vielen (also nicht allen) Fällen ist die Verwendung ausufernder Bibliotheken/Frameworks nicht sinntragend, sogar kontraproduktiv und im Verhältnis zur Nutzung der Vanilla-Funktionen, vergleichbar unsicher.

            Was wenn, z.B. auf Grund vorgegebener Inhalte der Empfängeradresse(n) und Betreffzeile(!n, Singular!) deren aufwendige Behandlung gar nicht nötig ist? Dann wird notlos Software benutzt, die eigene Fehler haben kann und zudem Leistung (Speicher, Prozessortakte) „frisst“.

            Ich finde, die nahezu pauschale und vom Verwendungszweck völlig unabhängige Reaktion „nimm *Mailer“ auf alles, was mit mail zu tun hat, ist jedenfalls in dieser Pauschalität völlig übertrieben, man muss ja auch die Kirche im Dorf lassen können. Ansonsten kann man auch - mit entsprechendem Performancgewinn bei den Aktien der Prozessorhersteller - jede Addition ganzer Zahlen, ein LibreOffice Calc fernsteuern.

            1. Hi,

              ich kann Dir hier leider keine Punkte geben.
              Das dürfen wohl nur die Ausgeforschten.

              Obwohl: die Untersuchung, ob hier z.B. der User_Agent-Header gespeichert wird, steht noch bevor! Die kommt dann irgendwann ganz überraschend.

              Jedenfalls meine ich, dass Du Recht hast. Man muss da als Programmierer Augenmaß bewahren und auch verstehen, welche Risiken "fertige" Klassenbibliotheken enthalten (können).

              LG
              me-too

              1. Hallo,

                ich kann Dir hier leider keine Punkte geben.
                Das dürfen wohl nur die Ausgeforschten.

                das dürfen die, die selbst ein Guthaben von mindestens 50 haben.
                Setzt also eine Anmeldung voraus. 😉

                Obwohl: die Untersuchung, ob hier z.B. der User_Agent-Header gespeichert wird, steht noch bevor!

                Hä??

                Jedenfalls meine ich, dass Du Recht hast. Man muss da als Programmierer Augenmaß bewahren und auch verstehen, welche Risiken "fertige" Klassenbibliotheken enthalten (können).

                Meine Rede seit 1757. Oder so.

                Live long and pros healthy,
                 Martin

                --
                Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
              2. Tach!

                Jedenfalls meine ich, dass Du Recht hast. Man muss da als Programmierer Augenmaß bewahren und auch verstehen, welche Risiken "fertige" Klassenbibliotheken enthalten (können).

                Das Augenmaß sollte man aber auch auf sich selbst anwenden, damit die Angelegenheit nicht zu einseitig wird. Die eigenen Fähigkeiten, sicher zu programmieren und alle Problemstellungen erkennen zu können, muss man auch in die Abwägungsschale legen. Sich zu überschätzen, um keine Fremdsoftware verwenden zu müssen, bringt auch keine Punkte. Den Risiken fertiger Bibliotheken steht also das Risiko der eigenen (Un)fähigkeit gegenüber.

                dedlfix.

            2. Hallo Raktetenwilli,

              In sehr vielen (also nicht allen) Fällen ist die Verwendung ausufernder Bibliotheken/Frameworks nicht sinntragend, sogar kontraproduktiv und im Verhältnis zur Nutzung der Vanilla-Funktionen, vergleichbar unsicher.

              Was wenn, z.B. auf Grund vorgegebener Inhalte der Empfängeradresse(n) und Betreffzeile(!n, Singular!) deren aufwendige Behandlung gar nicht nötig ist?

              Sicher, dass es das ist und nicht nur für das Beispiel zwecks Vereinfachung so gebracht wurde? Sicher, dass das auch so bleibt? – „Man könnte ja noch BCC einbauen, ist ja nur ein extra Header.“ ☠️☠️☠️

              Da Linuchs scheinbar nicht genau wusste, was die einzelnen Funktionen machen, die er da aufrief, hielt ich es nicht für unrealistisch, dass das problematisch werden könnte.

              Gruß
              Julius

              1. Naja. Man kann ja fragen was das denn werden soll oder ausführen, dass, wenn es denn „komplizierter“ wird (Mail mit mehreren Bestandteilen und sei es auch nur alternative HTML und Plaintext; ein- oder mehrere Anhänge, ggf. an eine eingebene Mailadresse und mit freiem Subjekt oder anderen Daten aus dem Request… ein Werkzeug „wie Swiftmail“ anzuraten ist.

                Immerhin muss man sich dann nicht selbst durch die Spec und ein Teil-Update derselben arbeiten um nachzusehen, wie man das dann geregelt bekommt. Ich hab das (Mail mit HTML und Text, sowie mit Anhängen als PDF oder Grafik) vor vielen Jahren mal gemacht und würde heute DAFÜR tatsächlich Swiftmail oder einen von dessen Kollegen nehmen...

                So, wie die Hinweise auf die Libs dargeboten wurden - übrigens ohne jeden Versuch, das fehlerverursachende Stück Quelltext zu identifizieren - ist es der Hinweis, immer eines dieser Tools zu nehmen. Und das ist, wie Sonntags mit einem 40 Tonner zum Bäcker zu fahren um Brötchen zu holen. Weil ja vielleicht irgendwo einer mit ein paar Tonnen Sand steht und per Anhalter mit will...

                1. Hallo Raketenkonstrukteur,

                  So, wie die Hinweise auf die Libs dargeboten wurden - übrigens ohne jeden Versuch, das fehlerverursachende Stück Quelltext zu identifizieren

                  Warum hätte ich das auch sollen, es gab bereits genug vielversprechende Ansätze (Zwischenergebnisse ausgeben und schauen, was passiert) für Linuchs, um den Fehler zu finden. Vor allem: Warum sollte ich Linuchs’ Arbeit machen, wenn ich eh einen ganz anderen Ansatz empfehle?

                  ist es der Hinweis, immer eines dieser Tools zu nehmen. Und das ist, wie Sonntags mit einem 40 Tonner zum Bäcker zu fahren um Brötchen zu holen. Weil ja vielleicht irgendwo einer mit ein paar Tonnen Sand steht und per Anhalter mit will...

                  Und du hast ein Weizenfeld im Garten neben der Windmühle? Ist ein schönes Hobby.

                  Gruß
                  Julius

                2. Hallo,

                  Und das ist, wie Sonntags mit einem 40 Tonner zum Bäcker zu fahren um Brötchen zu holen.

                  derzeit ist ja wegen der Corona-Krise das Sonntagsfahrverbot für LKW ausgesetzt, da wäre das sogar denkbar. ;-)

                  Aber im Ernst: Das erinnert mich an meinen Grundwehrdienst beim Bund. Ich war in einer Kaserne in Dornstadt bei Ulm stationiert - genau da, wo sich die A8 und die B10 kreuzen. Die nächstgelegene für uns zuständige Logistikeinheit war in Laupheim an der B30 etwas südwestlich von Ulm. Gute 30km einfache Fahrstrecke.

                  Und um die kontinuierliche Versorgung mit den nötigsten Gütern sicherzustellen (Ersatzteile, Munition, Gummisocken für die Leo2-Panzer[1] usw.) fuhren Montag bis Freitag zwei Zehntonner[2] von Dornstadt nach Laupheim und wieder zurück. Oft fast leer, oder mit einer Ladung, die auch ein VW-Bus hätte transportieren können. Man hätte morgens mal in Laupheim anrufen können und nachfragen, was an diesem Tag abzuholen ist.
                  Aber nö, stattdessen sind vier Soldaten mit zwei Dreiachser-LKWs von morgens bis zum frühen Nachmittag unterwegs (und die meiste Zeit verbringen sie mit Warten) und verfeuern nebenbei rund 50l Diesel.

                  Live long and pros healthy,
                   Martin

                  --
                  Ich stamme aus Ironien, einem Land am sarkastischen Ozean.

                  1. In Friedenszeiten kriegen die Monster tatsächlich Gummipolster auf die Stahlketten, wenn sie (auch) auf öffentlichen Straßen fahren sollen. Macht sonst den Asphalt kaputt. ↩︎

                  2. Obacht, die Streitkräfte bezeichnen ihre LKWs nach Nutzlast, nicht nach ZGG! ↩︎

  2. Hallo,

    per PHP versende ich Mails. Eine Mail-Adresse lautet wie vorname_nachnam@example.org Die kann PHP nicht senden.

    wie schon gesagt wurde: Daran muss nicht PHP schuld sein. Es könnte auch der auf dem Host eingerichtete sendmail-wrapper sein, oder einer der beteiligten SMTP-Server.

    Mit dem Thunderbird klappt es aber.

    Der ist allgemein sehr großzügig. Allerdings kommt auch eine ganz andere Server-Kette zum Einsatz, wenn du eine Nachricht mit T-Bird vom eigenen PC aus verschickst anstatt vom Webhoster aus.

    Soweit ich weiß, ist der Unterstrich doch ein gültiges ASCII-Zeichen.

    Er ist ein ASCII-Zeichen (U+005F), aber in Mailadressen sind nicht alle ASCII-Zeichen erlaubt. Im Zweifelsfall müsste man mal in RFC 2822 nachlesen, welche das sind.

    Muss das für PHP gesondert codiert werden?

    Nein.

    Live long and pros healthy,
     Martin

    --
    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
    1. Hallo

      Soweit ich weiß, ist der Unterstrich doch ein gültiges ASCII-Zeichen.

      Er ist ein ASCII-Zeichen (U+005F), aber in Mailadressen sind nicht alle ASCII-Zeichen erlaubt. Im Zweifelsfall müsste man mal in RFC 2822 nachlesen, welche das sind.

      Oder in RFC 5322, welcher RFC 2822 abgelöst hat und seinerseits mit RFC 6854 aktualisiert wurde. Nicht gerade überblickförderlich aber selbst bei einem solch alten System verändert sich immer wieder etwas.

      Muss das für PHP gesondert codiert werden?

      Nein.

      Laut dem Abschnitt zum Local Part im Wikipedia-Artikel E-Mail-Adresse ist es ein „immer schon“™️ erlaubtes Zeichen (A-Za-z0-9.!#$%&'*+-/=?^_`{|}~ [1][2]).

      Tschö, Auge

      --
      Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
      Hohle Köpfe von Terry Pratchett

      1. Wie wird hier der Backtick in einem Codeabschnitt maskiert? Mit einem Backslash hat es nicht funktioniert. Mit einem zweiten Backtick wird der Codeabschnitt zumindest bis zu seinem geplanten Ende gestreckt [2:1]. In der Auflistung der erlaubten Zeichen sollte er jedenfalls nur einmal stehen. ↩︎

      2. Das wurde nach dem Hinweis von Gunnar korrigiert. ↩︎ ↩︎

      1. Hallo Auge,

        das sieht nach einem wüsten Durcheinander im Markdown-Parser aus. Vermutlich ist er da an seinen Grenzen angekommen.

        Ich verwende für die "Source"-Darstellung jetzt das Zeichen \u02cb (modifizierender Gravis): ˋ Situs viback tickisse tabernit, wie der Küchenlateiner sagt.

        ˋDas ist ein \ˋBacktick\ˋˋ wird zu Das ist ein \Backtick`` - der Backslash wird innerhalb von Code ignoriert

        ˋDas ist ein ˋˋBacktickˋˋˋ wird zu `Das ist ein ``Backtick``` - offenbar schaltet da was den Mathe-Modus ein ohne dass ein $$ im Spiel ist.

        ˋDas ist ein ˋˋBacktickˋˋ ˋ wird zu Das ist ein ``Backtick`` - das einzelne Space beendet die Mathe-Erkennung und die Doppel-Backticks bleiben verbatim stehen

        ˋˋˋBacktickˋˋˋ wird zu Backtick - der Dreifachbacktick wird wie einer behandelt

        ˋqˋˋBacktickˋˋˋ wird zu `q``Backtick``` - das q (oder auch andere Zeichen) im Dreifackbacktick schalten Mathe ein

        ˋˋqˋBacktickˋˋˋ wird zu ``q`Backtick``` - Mathe wird eingeschaltet, das q ist aber außerhalb.

        Ich hab mal versucht, zu verstehen, was da in cforum_ex bzw. cfmarkdown bei Github abgeht - aber sorry, fail.

        Rolf

        --
        sumpsi - posui - obstruxi
      2. @@Auge

        Wie wird hier der Backtick in einem Codeabschnitt maskiert?

        Nicht. Wenn du einen Backtick drinnen hast, musst außenrum was anderes nehmen: zwei Backticks (mit Leerzeichen abgetrennt).

        Wenn du Doppel-Backtick drinnen hast, musst außenrum was anderes nehmen: drei Backticks …

        `` ` `` wird zu `

        🖖 Stay hard! Stay hungry! Stay alive! Stay home!

        --
        Home Office ist so frustierend, weil man jetzt noch viel stärker bemerkt mit wievielen Menschen man zu tun hat, die nicht sinnerfassend lesen können. (@Grantscheam)
        1. Hallo Gunnar,

          alles klar, das muss man erstmal wissen. Steht das irgendwo?

          Die Fehlerbehandlung ist trotzdem unsauber, vor allem die Mathematisierung von:

          `mein Code mit ``Backtick```
          

          `mein Code mit ``Backtick```

          Rolf

          --
          sumpsi - posui - obstruxi
          1. @@Rolf B

            alles klar, das muss man erstmal wissen. Steht das irgendwo?

            Auf dieser Seite: Hilfe. Click.

            „Formatierung der Beiträge. Das SELFHTML-Forum nutzt Markdown …“ Click.

            Im Kasten rechts ist die Website verlinkt. Cli…

            Moment mal, warum verweist die SELFHTML-Hilfeseite auf die Wikipedia und nicht gleich auf die Markdown-Seite? Ist das sinnvoll?

            Click.

            Basics. Click.

            Scroll, scroll, scroll … “Code. In a regular paragraph, you can create code span by wrapping text in backtick quotes…” Nichts von Doppel-Backticks. Hm … vielleicht unter Syntax? Click.

            Span Elements > Code. Click.

            “To include a literal backtick character within a code span, you can use multiple backticks as the opening and closing delimiters…”

            🖖 Stay hard! Stay hungry! Stay alive! Stay home!

            --
            Home Office ist so frustierend, weil man jetzt noch viel stärker bemerkt mit wievielen Menschen man zu tun hat, die nicht sinnerfassend lesen können. (@Grantscheam)
        2. Hallo

          Wie wird hier der Backtick in einem Codeabschnitt maskiert?

          Nicht. Wenn du einen Backtick drinnen hast, musst außenrum was anderes nehmen: zwei Backticks (mit Leerzeichen abgetrennt).

          Wenn du Doppel-Backtick drinnen hast, musst außenrum was anderes nehmen: drei Backticks …

          `` ` `` wird zu `

          Danke für die Aufklärung.

          Tschö, Auge

          --
          Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
          Hohle Köpfe von Terry Pratchett