2016-04-09 18 views
0

Ich baue ein Massen-E-Mail-Tool, um eine Liste unserer Kunden in Bezug auf einige anstehende Migrationen zu adressieren. Unser aktuelles Massenmail-Tool schneidet in diesem speziellen Fall nicht ganz ab, wo ich mich dafür entschieden habe, nur einen zu erstellen.PHPMailer zeigt kein HTML an

Ich benutze TinyMCE, um einen Editor für den E-Mail-Nachrichtentext bereitzustellen und diesen an PHPMailer zu senden. Alles funktioniert gut, außer das HTML wird nicht richtig angezeigt, wenn es in einem Client wie Outlook angezeigt wird. Ich habe absolut sicher gemacht $mail->isHTML(true) ist eingestellt, so dass ich jetzt ratlos bin.

Ich Echo der Wert von $ Nachricht in der Funktion bulk_mail_sender() und seine korrekte. Wenn ich diese Zeichenfolge als $ mail-> Body einfügen, funktioniert es. Wenn ich $ message jedoch als $ mail-> Body eingestellt habe, werden daraus alle möglichen seltsamen Zeichen.

Nachricht Quelle:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">&lt;p&gt;Hi there,&lt;/p&gt; 
&lt;p&gt;Â&nbsp;&lt;/p&gt; 
&lt;p&gt;What is up foo&lt;/p&gt; 

Code:

function bulk_mail_sender($vars, $emails, $subject, $message) 
{ 
    foreach ($emails as $email) 
    { 
     $mail = new PHPMailer; 
     $mail->isSMTP();         // Set mailer to use SMTP 
     $mail->SMTPAuth = true;        // Enable SMTP authentication 
     $mail->Host = $vars['opt_host'];     // Specify main SMTP Server 
     $mail->Port = $vars['opt_port'];     // TCP port 
     $mail->Username = $vars['opt_user'];    // SMTP Username 
     $mail->Password = $vars['opt_pass'];    // SMTP Password 
     $mail->SMTPSecure = $vars['opt_type'];    // Enable TLS/SSL encryption 

     $mail->setFrom($vars['opt_sender_email'], $vars['opt_sender_name']); 

     $mail->addAddress($email); 
     $mail->addReplyTo($vars['opt_sender_email'], $vars['opt_sender_name']); 
     $mail->isHTML(true); 

     $mail->Subject = $subject; 
     $mail->Body = $message; 

     if(!$mail->send()) 
     { 
      echo 'Message failed to send to ' . $email; 
      echo 'Mailer Error: ' . $mail->ErrorInfo . '</br></br>'; 
     } 
     else 
     { 
      echo 'Message has been sent to ' . $email . '</br>'; 
     } 
    } 
} 

function bulk_mail_output($vars) 
{ 
    if (!empty($_POST)) 
    { 
     $subject = $_POST['subject']; 
     $message = $_POST['message']; 

     $emails = $_POST['emails']; 
     $emails = explode(PHP_EOL, $emails); 

     bulk_mail_sender($vars, $emails, $subject, $message); 
    } 
    else 
    { 
     echo '<form method="POST" action="">'; 

     echo 'Subject: <input type="text" name="subject" id="subject"></br></br>'; 
     echo '<textarea rows="10" cols="100" name="message" id="message"></textarea></br></br>'; 

     echo '<h3>Email Addresses</h3>'; 
     echo '<textarea rows="10" cols="100" name="emails" id="emails"></textarea></br></br>'; 

     echo '<input type="submit" value="Submit">'; 

     echo '</form>'; 

     echo '<script language="javascript" type="text/javascript" src="../includes/jscript/tiny_mce/tiny_mce.js"></script> 
       <script language="javascript" type="text/javascript"> 

        tinyMCE.init({ 
         mode: "exact", 
         elements: "message", 
         theme: "advanced", 
         entity_encoding: "raw", 
         convert_urls: false, 
         relative_urls: false, 
         plugins: "style,table,advlink,inlinepopups,media,searchreplace,contextmenu,paste,directionality,visualchars,xhtmlxtras", 
         theme_advanced_buttons1: "cut,copy,paste,pastetext,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontselect,fontsizeselect,|,search,replace", 
         theme_advanced_buttons2: "bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,|,forecolor,backcolor,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,media,|,ltr,rtl,cleanup,code,help", 
         theme_advanced_buttons3: "", // tablecontrols 
         theme_advanced_toolbar_location: "top", 
         theme_advanced_toolbar_align: "left", 
         theme_advanced_statusbar_location: "bottom", 
         theme_advanced_resizing: true 
        }); 

        function toggleEditor(id) 
        { 
         if (!tinyMCE.get(id)) 
          tinyMCE.execCommand(\'mceAddControl\', false, id); 
         else 
          tinyMCE.execCommand(\'mceRemoveControl\', false, id); 
        } 
       </script>'; 
    } 
} 
+0

Sie sagen nicht, was das eigentliche Problem ist - "nicht richtig angezeigt" ist nicht viel zu machen. Entitäten oder Unicode-Inhalte sollten gut funktionieren, also machen Sie wahrscheinlich etwas anderes falsch. Auch Faktor in dieser Aussicht ist ein Haufen Müll, wenn es um HTML-Handling kommt. – Synchro

Antwort

0

Obwohl ich nicht immer einen Weg, dies zu beheben innerhalb TinyMCE finden konnte, die Abhilfe verwendet wurde, um nur meine $ message Variable umwickeln die html_entity_decode Funktion bei der Einstellung auf den Mail-Körper. Ich hätte es vorgezogen, die Daten von TinyMCE beim ersten Mal richtig zu übergeben, aber die Entitätscodierung kann aus irgendeinem Grund nicht vollständig deaktiviert werden.

$mail = new PHPMailer; 
$mail->CharSet = "UTF-8"; 
$mail->isSMTP();         // Set mailer to use SMTP 
$mail->SMTPAuth = true;        // Enable SMTP authentication 
$mail->Host = $vars['opt_host'];     // Specify main SMTP Server 
$mail->Port = $vars['opt_port'];     // TCP port 
$mail->Username = $vars['opt_user'];    // SMTP Username 
$mail->Password = $vars['opt_pass'];    // SMTP Password 
$mail->SMTPSecure = $vars['opt_type'];    // Enable TLS/SSL encryption 

$mail->setFrom($vars['opt_sender_email'], $vars['opt_sender_name']); 
$mail->addReplyTo($vars['opt_sender_email'], $vars['opt_sender_name']); 

$mail->addAddress($email); 
$mail->isHTML(true); 

$mail->Subject = $subject; 
$mail->Body = html_entity_decode($message); 

if(!$mail->send()) 
{ 
    echo 'Message failed to send to ' . $email; 
    echo 'Mailer Error: ' . $mail->ErrorInfo . '</br></br>'; 
} 
else 
{ 
    echo 'Message has been sent to ' . $email . '</br>'; 
}