• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Probleme mit der Darstellung von Newsletter

gude-laune

Neues Mitglied
Ich habe mir folgendes Script programmiert

PHP:
<?php 
// Emailversand
if ($_POST['senden_nl']) {

$text2 = '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Newsletter</title>
<style type="text/css">
body {margin: 0px; font-family: Verdana, Helvetica, sans-serif; }
.main { height: 400px; width: 800px; background: url(http://www.seite.de/htmlmail/nl.jpg); margin: 0px auto; }
.main2 { width: 780px; margin: 0px auto; background: url(http://www.seite.de/htmlmail/nl2.jpg) repeat-y; padding: 10px; }
.small { font-size: 9px; }
</style>
</head>
<body>
<div class="main"></div>
<div class="main2"><br>'.nl2br($_POST['text']).'
<br><br>
<p class="small">Wenn Sie diesen Newsletter nicht mehr erhalten m&ouml;chten, klicken Sie bitte <a href="http://seite.de/index.php?site=newsletter">hier</a>.</p>
</div>
</body>
</html>';


// DB Einstellungen und sonstige Definitionen
    include '../inc/connect.php';
    $table = "newsletter";         // Tabelle    

// Verbindung 
    $zdaten = mysql_connect($host,$id,$pw); 
    mysql_select_db($database,$zdaten);

$info = mysql_query("select `mail` from newsletter WHERE receive = 1");
$auslesen = mysql_num_rows($info);


for ($i=0; $i < $auslesen; $i++) {
    $header  = 'MIME-Version: 1.0' . "\r\n";
    $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $header .= 'From: seite.de <[email protected]>' . "\r\n";

    $mail = mysql_result($info, $i, "mail");    //mail = Tabellenspalte
        mail($mail, "Newsletter", $text2, $header);
    echo "Mail erfolgreich versandt an $mail<br>";
}    }
?>

Das Versenden alle Teilnehmer klappt einwandfrei. Das Problem ist aber, dass der Newsletter bei einigen Teilnehmern als Quelltext ankommt. Heißt, dass der HTMl Quelltext dargestellt wird. Dies passiert sowohl unter Outlook, Thunderbird als auch bei Web, GMX, etc.. Wenn ich den Newsletter bei mir öffne, kann ich die Grafiken nachladen lassen unter Thunderbird. Jetzt daher die Frage: Wie kommt das und was kann ich tun?
 
Man muss in PHP maskieren.
PHP:
<?php
  echo "Hello \"World\"";
  ?>
Ich würde das so machen:

PHP:
   <?php
// Emailversand
if ($_POST['senden_nl']) {

$text = nl2br($_POST[text]);

$text2 = <<<EOT
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <title>Newsletter</title>
            <style type="text/css">
                body {margin: 0px; font-family: Verdana, Helvetica, sans-serif; }
                .main { height: 400px; width: 800px; background: url(http://www.seite.de/htmlmail/nl.jpg); margin: 0px auto; }
                .main2 { width: 780px; margin: 0px auto; background: url(http://www.seite.de/htmlmail/nl2.jpg) repeat-y; padding: 10px; }
                .small { font-size: 9px; }
            </style>
        </head>
        <body>
            <div class="main"></div>
            <div class="main2"><br />$text
            <br /><br />
            <p class="small">Wenn Sie diesen Newsletter nicht mehr erhalten m&ouml;chten, klicken Sie bitte <a href="http://seite.de/index.php?site=newsletter">hier</a>.</p>
            </div>
        </body>
</html>
EOT;

// DB Einstellungen und sonstige Definitionen
    include '../inc/connect.php';
    $table = "newsletter";         // Tabelle    

// Verbindung
    $zdaten = mysql_connect($host,$id,$pw);
    mysql_select_db($database,$zdaten);

$info = mysql_query("select `mail` from newsletter WHERE receive = 1");
$auslesen = mysql_num_rows($info);


for ($i=0; $i < $auslesen; $i++) {
    $header  = 'MIME-Version: 1.0' . "\r\n";
    $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $header .= 'From: seite.de <[email protected]>' . "\r\n";

    $mail = mysql_result($info, $i, "mail");    //mail = Tabellenspalte
        mail($mail, "Newsletter", $text2, $header);
    echo "Mail erfolgreich versandt an $mail<br>";
}    }
?>
Ich hab das ein bisschen verändert. Ich hab $text schon vorher verarbeitet und <<<EOT bewirkt, dass du ganz normalen HTML Code schreiben kannst. :)
Ich hoffe es hilft dir!
 
Man muss in PHP maskieren.

Aber auch nicht alles und immer!

Wenn man schreibt $text=' ...
dann muss man nur das einfache Hochkomma quoten, nicht aber die Anführungszeichen. Der Grund dafür ist doch nur, damit PHP erkennt, wo der String endet. Wenn ein STring mit ' begonnen wird, dann endet er am nächsten '. Und wenn man darin ein ' ausgeben will, muss man das quoten (mit Backslash). Umgekehert gilt das genauso.

Aber das Problem sehe ich im Code des OP nicht.

Der Grund dafür, dass Quelltext angezeigt wird, könnte auch sein, dass das Empfängermailprogramm so eingestellt ist, dass es kein HTML anzeigt. SMTP ist immerhin ein Plain Text-Protokoll.
 
Dann war es ja richtig von Anfang an. Warum funktioniert das dann nicht? Ich erhalte einige Newsletter und diese werden auch beispielsweise über GMX normal dargestellt.
 
So, durch Ändern des Headers konnte ich Problem 1 beseitigen. Jetzt habe ich das Problem, dass einigen Leuten die Hintergrundbilder nicht geladen werden bzw. dass es keine Möglichkeit gibt diese nachzuladen. Was kann man hier tun?
 
So, das Ganze wird nun so gemacht

PHP:
  $ImageLocation ="../htmlmail/nl.jpg";
  $ImgName = "nl.jpg";
  $MailFrom="adresse";
  $MailFromAdr="[email protected]";
  $MailTo ="[email protected]";
  $MailToSubject = "Test-Mail mit Bild";

  $CID = md5(uniqid (rand(), 1));

  $mime_boundary = "" . md5(uniqid(mt_rand(), 1));  

  $Header= "From:$MailFrom<$MailFromAdr>\n";
  $Header.= "X-Mailer: PHP/" . phpversion(). "\n";  
  $Header.= "MIME-Version: 1.0\n";
  $Header.= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"; type=\"text/plain\"\n"; 

    $MailBody = "--".$mime_boundary."\n";
    $MailBody.= "Content-Type: text/html; charset=iso-8859-1";  
    $MailBody.= "Content-Transfer-Encoding: quoted-printable\n\n";  
    $MailBody.= "<html>\n";
    $MailBody.= "<body style=\"font-family:Verdana, Verdana, Geneva, sans-serif; font-size:12px; color:#666666;\">\n";
    $MailBody.= "<div style='height: 400px; width: 800px; background: url(cid:$CID.$ImgName); margin: 0px auto;'></div>\n";
    $MailBody.= "<div style=\"width: 780px; margin: 0px auto; background: url() repeat-y; padding: 10px;\"><br>".nl2br($_POST['text'])."\n";
    $MailBody.= "<br><br>\n";
    $MailBody.= "<p style=\"font-size: 9px;\">Wenn Sie diesen Newsletter nicht mehr erhalten m&ouml;chten, klicken Sie bitte <a href=\"http://adresse.de/index.php?site=newsletter\">hier</a>.</p>\n";
    #$MailBody.= "<img src='cid:$CID.$ImgName'>";
    $MailBody.= "</div>\n";
    $MailBody.= "</body>\n";
    $MailBody.= "</html>\n";
    $MailBody.= "\n\n";
    $MailBody.= "--".$mime_boundary."\n";  


  $fp = fopen ($ImageLocation, "rb");
  $str = fread ($fp, filesize ($ImageLocation));
  $data = chunk_split(base64_encode($str));
  $content.= "Content-Type: image/jpeg\n";
  $content.= "Content-ID: <$CID.$ImgName>\n";
  $content.= "Content-Transfer-Encoding: base64\n";
  $content.= "Content-Disposition: inline; filename=\"$ImgName\"\n\n";  

  $content.= $data;
  $MailBody.= $content;
  $MailBody.= "--".$mime_boundary."--\n";  

   #mail($MailTo, $MailToSubject, $MailBody, $Header);

Das Bild das als img eingebunden wird und momentan auskommentiert wird, wird dargestellt. Das Bild, dass oer CSS eingebunden wird, wird nicht dargestellt. Hat jemand eine Idee?
 
Zuletzt bearbeitet:
Zurück
Oben