mysteriöser Fehler bei Darstellung von HTML-Mails

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

  • mysteriöser Fehler bei Darstellung von HTML-Mails

    Hallo,

    ich verwende in meinen Projekten für jeglichen Mailversand die Klasse phpMailer. Ziemlich gut und empfehlenswert.

    Allerdings hab ich es hier mit einem Fehler zu tun, den ich mir nun überhaupt nicht erklären kann.

    Ich verschicke zwei Mails in Folge, die erste an den Anbieter, die zweite an den Seitenbesucher, der sich angemeldet hat.

    Funktioniert, die Mails kommen an. Da sind nun einige Passagen drin, die in HTML dargestellt werden sollen.

    HTML ist auf "true", funktioniert auch. Nun wird der Code für die Mail eben dynamisch aufgebaut und aus irgendeinem Grund kommt es dazu, dass die Mail manchmal als HTML und manchmal als Plain dargestell wird, in Abhängigkeit von einer bestimmten String-Variablen, die an einer bestimmte Stelle des HTML-Dokuments eingebettet wird.

    Ich konnte aber nach ausgiebiger Analyse bisher keine plausible Fehlerursache feststellen.

    Heißt der String z.B. "Bitte geben" (nur als Beispiel), erscheint die ganze Mail als HTML. Heißt der gleiche String dagegen "Bitte geben Sie eine ..." oder so ähnlich (enthält keine Sonderzeichen!), kann es passieren, dass sie Plain dargestellt wird. Lass ich den String ganz raus, erscheint sie ebenfalls als Plain.

    In der ersten Mail (an den Seitenbetreiber) verschicke ich an dieser Stelle Infos über IP, Server, Zeitpunkt. Übernehme ich diesen String (zum Test) auch für den Kunden, erscheint die Mail ebenfalls als HTML. Ändere ich den String ab, wird schnell wieder Plaintext aus der Mail... allerdings ohne einen für mich ersichtlichen Grund... also Sonderzeichen o.ä. kommen wie gesagt nicht vor, sogar nicht mal unbedingt HTML.

    Puh...
    Da bin ich nun ziemlich überfordert.

    Evtl. hat das was mit der Länge an sich zu tun? Ich weiß jetzt nicht... Muss in so einer Mail alle paar Zeichen \r\n erscheinen oder so was? Wobei ich auch das schon probiert hab, aber das löst das Problem noch nicht. Nach irgendwas in der Art schaut es hier aus, aber das muss man dann wohl wissen.

    Kennt jemand diese Ecke von Fehler in HTML-Mails?

    Gruß Maik



    (HTML muss es eben sein, der Seitenbetreiber will das so.)
    Zuletzt geändert von *Maiki; 10.11.2007, 19:31.

  • #2
    So ganz ohne Quellcode kann man gar nicht sehen, welchen Bock du da geschossen hast!
    Wir werden alle sterben

    Kommentar


    • #3
      Codebeispiel

      Es ist zum Verzweifeln...

      Der Fehler ist auf jeden Fall mal reproduzierbar: Lass ich das selbe Skript ohne Änderung x mal laufen, krieg ich x mal das gleiche Ergebnis. Änder ich auch nur bisschen was an der Content-Zusammensetzung, sind Änderungen in der Form entweder HTML- oder Plaintext-Ausgabe leicht möglich.

      Es lässt sich nach Probieren keine Abhängigkeit von Server, Email-Adressen, etc. feststellen, es muss was direkt mit dem Content zu tun haben.

      Hier ein Beispiel, bei dem die Mail als Plain angezeigt wird:
      PHP-Code:
                                    $mail = new PHPMailer();
      $mail->IsSMTP();
      $mail->Host "...";
      $mail->SMTPAuth true;
      $mail->Username "...";
      $mail->Password "...";


                                      
      $mail->From "info@hasihasihasi.de";
                                      
      $mail->FromName "hasi.de";

                                      
      $mail->AddAddress $_POST 'email' ], $_POST 'vorname' ] . " " $_POST 'name' ] );
                                      
                                      
      $mail->IsHTML(true);                                  // set email format to HTML

                                      
                                      
      if ( $profil_aendern == true )
                                      {
                                              
      $mail->Subject "Profilaenderung fuer hasihasihasi.de\r\n";
                                              
                                              
      $aktion "<b>Sie haben Ihre Daten wie folgt aktualisiert:</b><br><br>";

                                              
      $text_drunter "<br><br><small>Das Passwort wird aus Sicherheitsgr&uuml;nden nicht angezeigt.</small><br><br><small>Sollten Sie es vergessen haben, fordern Sie</small><br><small>es bitte &uuml;ber den Punkt Passwort vergessen neu an.</small><br><br>";

                                              
      $freischaltung "";

                                              
      $freischaltung2 "";

                                      }
                                      else
                                      {
                                              
      $mail->Subject "Ihre Registrierung fuer hasihasihasi.de - Bitte bestaetigen!\r\n";

                                              
      $aktion "<b>Sie haben sich mit folgenden Daten angemeldet:</b><br><br>";

                                              
      $text_drunter "Das Passwort wird aus Sicherheitsgr&uuml;nden nicht angezeigt."//"<small>Das Passwort wird aus Sicherheitsgr&uuml;nden nicht angezeigt.</small>"; //<br><small>Sollten Sie es vergessen haben, fordern Sie</small><br><small>es bitte &uuml;ber den Punkt Passwort vergessen neu an.</small>";

                                              
      $freischaltung "Damit Sie den Zugang nutzen konnen mussen Sie ihn durch Klicken dieses Links freischalten:<br>";

                                              
      $freischaltung2 =
                                               
      "<a href=\"http://www.hasihasihasi.de\">Ich best&auml;tige, dass ich mich mit diesen Daten f&uuml;r hasihasihasi.de registrieren m&ouml;chte.</a>";
                                      }

                                    
      $mail->Body =

                                               
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">".
                                               
      "<HTML>".
                                               
      "<HEAD>".
                                               
      "<TITLE></TITLE>".
                                               
      "<META http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\">".
                                               
      "<style type=\"text/css\">".
                                               
      " body, table { text-decoration:none; font-weight:normal; color:#222222; font-size:10pt; font-family:Arial; }".
                                               
      "  a:link { text-decoration:none; font-weight:normal; color:#cc0000; } a:visited { text-decoration:none; font-weight:normal; color:#cc0000; }".
                                               
      "  a:hover { text-decoration:none; font-weight:normal; color:#ff0000; } a:active { text-decoration:none; font-weight:normal; color:#ff0000; }".
                                               
      "  a:focus { text-decoration:none; font-weight:normal; color:#ff0000; }".
                                               
      " .kleinschrift { font-size:9pt; }".                                                     
                                               
      "</style>".
                                               
      "</HEAD>".
                                               
      "<BODY bgcolor=\"#eeeeee\" text=\"#000000\">".

                                               
      $aktion .

                                               
      //$daten_string .

                                               
      $text_drunter $freischaltung $freischaltung2 .

      "<div class=\"kleinschrift\">" .
                                                           
      "<b>Zeitpunkt der Absendung:</b> " htmlentities $zeitpunkt ). "<br>" .
                                                           
      "<b>IP:</b> " htmlentities $ip ) . "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" .
                                                       
      "<b>Host:</b> " htmlentities $host ) . "<br><br>" .
      "</div>" .

                                               
      "</BODY>".
                                               
      "</HTML>";

                                               
      $mail->AltBody $mail->Body;

                                                          if ( ! 
      $mail->Send () )
                                                          {
                                                                           echo 
      "<br><br>Mail an " $_POST 'email' ] . " konnte nicht verschickt werden!";
               
               
      fehlermeldung_in_datenbank_schreiben "Mail an Kunde konnte nicht verschickt werden." );
               
                                                          }
                                                          else
                                                          {
               echo 
      "<br><br>Sie bekommen in K&uuml;rze eine Email mit Ihren Registrierungsdaten.<br><br><br><br><br><br>"//, in der Sie Ihre Registrierungsabsicht best&auml;tigen m&uuml;ssen.";
                                                          
      }


              } 
      So, jetzt zum Vergleich ein Beispiel, wo HTML rauskommt, weil in irgendeinem String ein paar Zeichen weniger enthalten sind...:


      PHP-Code:
                                    $mail = new PHPMailer();
      $mail->IsSMTP();
      $mail->Host "...";
      $mail->SMTPAuth true;
      $mail->Username "...";
      $mail->Password "...";
                                      
      $mail->From "info@hasihasihasi.de";
                                      
      $mail->FromName "hasi.de";
                                      
      $mail->AddAddress $_POST 'email' ], $_POST 'vorname' ] . " " $_POST 'name' ] );
                                      
      $mail->IsHTML(true);                                  // set email format to HTML
                                      
      if ( $profil_aendern == true )
                                      {
                                              
      $mail->Subject "Profilaenderung fuer hasihasihasi.de\r\n";
                                              
      $aktion "<b>Sie haben Ihre Daten wie folgt aktualisiert:</b><br><br>";
                                              
      $text_drunter "<br><br><small>Das Passwort wird aus Sicherheitsgr&uuml;nden nicht angezeigt.</small><br><br><small>Sollten Sie es vergessen haben, fordern Sie</small><br><small>es bitte &uuml;ber den Punkt Passwort vergessen neu an.</small><br><br>";

                                              
      $freischaltung "";
                                              
      $freischaltung2 "";
                                      }
                                      else
                                      {
                                              
      $mail->Subject "Ihre Registrierung fuer hasihasihasi.de - Bitte bestaetigen!\r\n";

                                              
      $aktion "<b>Sie haben sich mit folgenden Daten angemeldet:</b><br><br>";
                                              
      $text_drunter "Das Passwort wird aus Sicherheitsgr&uuml;nden nicht angezeigt."//"<small>Das Passwort wird aus Sicherheitsgr&uuml;nden nicht angezeigt.</small>"; //<br><small>Sollten Sie es vergessen haben, fordern Sie</small><br><small>es bitte &uuml;ber den Punkt Passwort vergessen neu an.</small>"; 
      $freischaltung = "Damit Sie den Zugang"; // nutzen konnen mussen Sie ihn durch Klicken dieses Links freischalten:<br>";
      PHP-Code:
                                              $freischaltung2 =
                                               
      "<a href=\"http://www.hasihasihasi.de\">Ich best&auml;tige, dass ich mich mit diesen Daten f&uuml;r hasihasihasi.de registrieren m&ouml;chte.</a>";
                                                                               }
                                    
      $mail->Body =
                                               
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">".
                                               
      "<HTML>".
                                               
      "<HEAD>".
                                               
      "<TITLE></TITLE>".
                                               
      "<META http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\">".
                                               
      "<style type=\"text/css\">".
                                               
      " body, table { text-decoration:none; font-weight:normal; color:#222222; font-size:10pt; font-family:Arial; }".
                                               
      "  a:link { text-decoration:none; font-weight:normal; color:#cc0000; } a:visited { text-decoration:none; font-weight:normal; color:#cc0000; }".
                                               
      "  a:hover { text-decoration:none; font-weight:normal; color:#ff0000; } a:active { text-decoration:none; font-weight:normal; color:#ff0000; }".
                                               
      "  a:focus { text-decoration:none; font-weight:normal; color:#ff0000; }".
                                               
      " .kleinschrift { font-size:9pt; }".                                                     
                                               
      "</style>".
                                               
      "</HEAD>".
                                               
      "<BODY bgcolor=\"#eeeeee\" text=\"#000000\">".
                                               
      $aktion .
                                               
      //$daten_string .
                                               
      $text_drunter $freischaltung $freischaltung2 .
      "<div class=\"kleinschrift\">" .
      "<b>Zeitpunkt der Absendung:</b> " htmlentities $zeitpunkt ). "<br>" .
      "<b>IP:</b> " htmlentities $ip ) . "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" .
      "<b>Host:</b> " htmlentities $host ) . "<br><br>" .
      "</div>" .
                                               
      "</BODY>".
                                               
      "</HTML>";
                                               
      $mail->AltBody $mail->Body;

                                                          if ( ! 
      $mail->Send () )
                                                          {
                                                                           echo 
      "<br><br>Mail an " $_POST 'email' ] . " konnte nicht verschickt werden!";
               
               
      fehlermeldung_in_datenbank_schreiben "Mail an Kunde konnte nicht verschickt werden." );

                                                          }
      else
                                                          {
               echo 
      "<br><br>Sie bekommen in K&uuml;rze eine Email mit Ihren Registrierungsdaten.<br><br><br><br><br><br>"//, in der Sie Ihre Registrierungsabsicht best&auml;tigen m&uuml;ssen.";
                                                          
      }
              } 
      Ändere ich also lediglich den Inhalt des Strings
      $freischaltung von

      "Damit Sie den Zugang nutzen konnen mussen Sie ihn durch Klicken dieses Links freischalten:<br>";

      auf

      "Damit Sie den Zugang"; // nutzen konnen mussen Sie ihn durch Klicken dieses Links freischalten:<br>";

      kommt statt Plain auf einmal HTML raus.

      Es muss wohl irgendwas mit Blöcken / Längen / Umbruchzeichen, irgend so was in der Art zu tun haben...? Vielleicht, dass nicht mehr als x Zeichen am Stück ohne ein zwischenzeitliches y vorkommen dürfen, so was vielleicht?

      Allerdings hab ich ähnliche Mailversendungen ja schon in mehreren PHP-Anwendungen eingebaut und erleb dies mysteriöse Problem nun zum ersten Mal. Ich komm nicht dahinter... Ein Wackler im Thunderbird wirds ja wohl nicht sein... Ausschauhaltende Klienten will ich nun allerdings wirklich nicht ausprobieren, in der Hoffnung, dass es auch eine humane Lösung gibt.

      Kommentar


      • #4
        meinst Du hier hat jemand Lust hundert Kilometer horizontal zu scrollen?

        Kommentar


        • #5
          Einerseits lässt sich hier schlecht was aus dem Zusammenhang
          rausreißen, weil der Fehler wie gesagt auftritt, wenn ich an
          sonstwelchen Stellen des Contents was ändere, da besteht
          also eine Abhängigkeit von was Globalerem als einem
          einzelnen String und dann hab ich den einen String als Beispiel
          ja mal fett rausgehoben, vielleicht lässt sich anhand der
          Unterscheidung für einen Gelehrten ja spontan
          schon ersehen, woher der Fehler rührt... (Ansonsten weiß ich nicht,
          wie ich längere Codepassagen aus so einem umfangreichen Skript
          noch viel kompakter darstellen soll, ohne womöglich zusätzlich Fehler
          dabei reinzuhauen, so leicht formatieren lässt sich mit dem
          Eingabefeld im Forum halt auch nicht.)

          Kommentar


          • #6
            Ok, es scheint in Richtung Junk zu gehen...

            Kommentar

            Lädt...
            X