jom: html mail versenden macht probleme mit TABLE

hallo,

beim versenden eines bestellformular generiere ich html code mit PHP, und diesen zeige ich zum testen in meinem browser an, und zwar ohne probleme.

gleichzeitig versende ich eine mail mit allen nötigen headern, und als content den soeben generierten html code.
mein E-mail client ist Outlook.
Wenn ich mir jetzt diese e-mail in meinem outlook anschaut gibt es probleme, diese problem taucht nicht immer auf.

und zwar wird meistens bei <TD>,<TR>,<TABLE> tags ein ! hinzugefügt.

ZB.:
</table!> oder <!TD>

dieses taucht genau einmal im ganzen quellcode auf, und hat zu folge das eine Zelle nicht richtig angezeigt werden kann, und das die folgenden verschoben werden.

Woran kann das liegen ?
Habe ich zu viele zeichen in meiner variablen $content gespeichert oder liegt es an outlook ?

danke

  1. Hallo,

    es geht mich zwar nichts an, wie Du Mails vesendest, aber HTML ist im www vorgesehen, und HTML-Mails nerven einfach nur ab.

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch
    1. Hallo Andreas,

      es geht mich zwar nichts an, wie Du Mails vesendest, aber HTML ist im www vorgesehen, und HTML-Mails nerven einfach nur ab.

      den Sinn darin sehe ich schon - gerade bei Bestellbestätigungen per Mail hast Du es fast zwangsläufig mit einer tabellarischen Auflistung der gekauften Produke zu tun. Leider haben die meisten Mailclients HTML-Format als Grundeinstellung; darüber hinaus noch viel schlimmer im Text-Fromat eine Schrift, wie Times, die keine gleichbreite Schrift ist. Im Hinblick auf diese Gegebenheiten und dem Mangel an Kenntnisnahme der Einstellungsmöglichkeiten seites der bestellenden User ist in diesem Zusammenhang das HTML-Fromat wirklich sehr hilfreich!

      Gruß aus Berlin!
      eddi

      1. Hallo eddi,

        den Sinn darin sehe ich schon - gerade bei Bestellbestätigungen per Mail hast Du es fast zwangsläufig mit einer tabellarischen Auflistung der gekauften Produke zu tun.

        aber gerade, wenn man schon PHP zur Verfügung hat, wäre es da nicht praktischer einen Link auf eine Bestellseite zu schicken? Gerade weil man dann viel bessere Möglichkeiten hat. Wenn ich eine Mail bekomme, will ich ja vielleicht auch nur per "RE:"-Klick antworten, daß ich nicht will oder was auch immer. Wenn ich dann den ganzen HTML-Kram in der Mail rumfliegen hab - mich nervt das.

        Gruß, Andreas

        --
        SELFFORUM - hier werden Sie geholfen,
        auch in Fragen zu richtiges Deutsch
        1. Hier ist mal mein Code:

          //HTMLMail Function
          function sendHTMLemail($to,$from,$subject,$content)
           {
            $message .= "<html>";
            $message .= "<head>";
            $message .= "<style type='text/css'>";
            $message .= "<!--";
            $message .= "body, td {";
            $message .= "font-family: Verdana, Arial, Helvetica, sans-serif;";
            $message .= "font-size: 12px;";
            $message .= "color: #000000; }";
            $message .= "-->";
            $message .= "</style>";
            $message .= "</head>";
            $message .= "<body>";
            $message .= $content;
            $message .= "</body>";
            $message .= "</html>";

          $headers="MIME-Version: 1.0\r\n";
            $headers.="Content-type: text/html; charset=iso-8859-1\r\n";
            $headers.="From: ".$from.">\r\n";

          if(mail($to,$subject,$message,$headers))
             {
             $result="send mail ok";
             }
            else
             {
             $result="send mail ko";
             }

          return $result;
          }

          //Und hier generiere ich die variable $content die ich an die function sendHTMLemail weitergebe, die dann bei $message im body eingefügt wird.

          //CONTENT
          $content="Hallo $cli_sname,<br><br>";
          $content.="Vielen Dank dass Du Dich für einen Einkauf bei www.maxs-sport.be entschieden hast.<br>";
          $content.="Hier folgt Deine Bestellbestätigung.<br><br>";
          $content.="<table width='100%' border='0' cellspacing='1' cellpadding='0'>";
          $content.="<tr>";
          $content.="<td bgcolor='#CCCCCC'><strong>Bestellnummer:</strong>&nbsp;$nr</td>";
          $content.="</tr>";
          $content.="</table><br>";
          $content.="<strong>Artikel:</strong><br>";
          $content.="<table width='100%' border='0' cellspacing='1' cellpadding='0'>";
          $content.="<tr bgcolor='#CCCCCC'>";
          $content.="<td width='50'>Anzahl</td>";
          $content.="<td width='100'>Artikelnummer</td>";
          $content.="<td>Artikelname</td>";
          $content.="<td width='75'>Einzelpreis</td>";
          $content.="<td width='75' align='right'>Preis</td>";
          $content.="</tr>";

          $Bez1=$langDB."Bez1";
          for($i=1; $i<=$_SESSION["basket_count"]; $i++)
            {
            $id=$all_art[0][$i];
            $q=$all_art[1][$i];
            $query="
            SELECT id,Artikelnummer,$Bez1,ENBez1,VKPreis,Artikelgruppe
            FROM art
            WHERE id = $id
            LIMIT 0,1
            ";

          $result=mysql_query($query);
            while($data=mysql_fetch_array($result))
             {
             $VKPreis=str_replace(",00 ","",$data["VKPreis"]);
             $VKPreis=str_replace(".","",$VKPreis);
             $VKPreis=str_replace(",",".",$VKPreis);
             $VKPreis=str_replace("€","",$VKPreis);

          $totalArt=$all_art[1][$i]*$VKPreis;

          //wenn bei BEZ1 keine übersetzung existiert
             if($data[$Bez1]==""){ $Bez1b=$data["ENBez1"];}
             else { $Bez1b=$data[$Bez1];}

          $content.="<tr>";
             $content.="<td>".$q."</td>";
             $content.="<td>".$data["Artikelnummer"]."</td>";
             $content.="<td>".$Bez1b."</td>";
             $content.="<td>".$VKPreis."&nbsp;&euro;</td>";
             $content.="<td align='right'>".$totalArt."&nbsp;&euro;</td>";
             $content.="</tr>";
             }
            }
           $content.="</table><br>";

          $content.="<strong>Versandart:</strong><br>";
           $content.=$_SESSION["shippingmode"].$_SESSION["shippingmode_preis"]."<br><br>";

          $content.="<strong>Anschrift:</strong><br>";
           $content.="$cli_sname<br>";
           $content.="$cli_adr<br>";
           $content.="$cli_zip<br>";
           $content.="$cli_country<br>";
           $content.="E-mail:&nbsp;<a href='mailto:$cli_email'>$cli_email</a><br><br><br>";

          $content.="Regards";

          $subject="ORDER CONFIRMATION - ".$nr;

          //CONFIRM MAIL TO CLIENT
           print $m=sendHTMLemail("jerome.mertes@fabelgym.com","jerome.mertes@fabelgym.com",$subject,$content);

          // header("Location:../$_POST[lang]/shop/order_ok.php");
           }

          1. function sendHTMLemail($to,$from,$subject,$content)
            {

            Doctype?

            $message .= "<html>";
              $message .= "<head>";
              $message .= "<style type='text/css'>";
              $message .= "<!--";

            Sind das zulässige Zeichen in einem <style>-Tag?

            $message .= "body, td {";
              $message .= "font-family: Verdana, Arial, Helvetica, sans-serif;";
              $message .= "font-size: 12px;";
              $message .= "color: #000000; }";
              $message .= "-->";
              $message .= "</style>";
              $message .= "</head>";
              $message .= "<body>";
              $message .= $content;
              $message .= "</body>";
              $message .= "</html>";

            $headers="MIME-Version: 1.0\r\n";
              $headers.="Content-type: text/html; charset=iso-8859-1\r\n";

            Ich wie wahrscheinlich auch Andreas sehen bei diesem Mime-Type nichts. Mails können mehrer Mime-Typen beherbergen!

            $headers.="From: ".$from.">\r\n";

            Encoding?

            if(mail($to,$subject,$message,$headers))
               {
               $result="send mail ok";
               }
              else
               {
               $result="send mail ko";
               }

            return $result;
            }

            //Und hier generiere ich die variable $content die ich an die function sendHTMLemail weitergebe, die dann bei $message im body eingefügt wird.

            //CONTENT
            $content="Hallo $cli_sname,<br><br>";

            <br><br> mag Outlook gar nicht; arbeite mit <div>

            $content.="Vielen Dank dass Du Dich für einen Einkauf bei www.maxs-sport.be entschieden hast.<br>";
            $content.="Hier folgt Deine Bestellbestätigung.<br><br>";
            $content.="<table width='100%' border='0' cellspacing='1' cellpadding='0'>";

            Outlook mag hier noch ein <tbody>

            $content.="<tr>";
            $content.="<td bgcolor='#CCCCCC'><strong>Bestellnummer:</strong>&nbsp;$nr</td>";
            $content.="</tr>";
            $content.="</table><br>";
            $content.="<strong>Artikel:</strong><br>";
            $content.="<table width='100%' border='0' cellspacing='1' cellpadding='0'>";

            <tbody>

            $content.="<tr bgcolor='#CCCCCC'>";
            $content.="<td width='50'>Anzahl</td>";
            $content.="<td width='100'>Artikelnummer</td>";
            $content.="<td>Artikelname</td>";
            $content.="<td width='75'>Einzelpreis</td>";
            $content.="<td width='75' align='right'>Preis</td>";
            $content.="</tr>";

            Schreibe eine Mail an Dich selbst im html-Format. Speichere als einzelne Datei auf der Platte, öffne sie im Editor Deiner wahl und lerne...

            Gruß aus Berlin!
            eddi

        2. Hallo Andreas,

          den Sinn darin sehe ich schon - gerade bei Bestellbestätigungen per Mail hast Du es fast zwangsläufig mit einer tabellarischen Auflistung der gekauften Produke zu tun.

          aber gerade, wenn man schon PHP zur Verfügung hat, wäre es da nicht praktischer einen Link auf eine Bestellseite zu schicken? Gerade weil man dann viel bessere Möglichkeiten hat. Wenn ich eine Mail bekomme, will ich ja vielleicht auch nur per "RE:"-Klick antworten, daß ich nicht will oder was auch immer. Wenn ich dann den ganzen HTML-Kram in der Mail rumfliegen hab - mich nervt das.

          Es wäre eine Möglichkeit, die beispielsweise das 1&1 - Shopsystem bietet. Aber mir scheint das Problem eher hausgemacht von den vielen Shopbastlern, wie hier ebenso ;)
          Eine weitere Möglichkeit ist Fähigkeit einer Mail mehrere Mime-Typen zu beherbergen.

          Gruß aus Berlin!
          eddi

  2. Hallo jom,

    poste bitte den gesamten Quelltext inclusive Header einer so erzeugten Mail und den PHP-Code. Vorab kannst Du ja schon mal den Quelltext auf Validität prüfen. Aber darüber hinaus mag gerade Freund Outlook noch ein paar Extraspirenzien...

    Gruß aus Berlin!
    eddi