2016-04-09 2 views
0

私はいくつかの今後の移行に関する当社のクライアントのリストに対処するために大量のメールツールを構築していますが表示されません。私たちの現在の大量メールツールは、この特定のケースではそれほどカットされていません。phpmailerのは、HTML

私は、電子メールメッセージの本文用のエディタを提供するのTinyMCEを使用して送信するためにphpmailerのに沿ってこれを渡しています。 Outlookなどのクライアントで表示されたhtmlが適切に表示されないことを除いて、すべてがうまくいっています。私は絶対に$mail->isHTML(true)が設定されているので、今私は迷っています。

私はbulk_mail_sender()関数とその正しいで$メッセージの値をエコーし​​ます。この文字列を$ mail-> Bodyという名前で貼り付けると動作します。 $ messageが$ mail-> Bodyとして設定されていれば、それはあらゆる種類の奇妙な文字に変わります。

メッセージ出典:

<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; 

コード:私が今までのTinyMCE内この問題を解決する方法を見つけることができなかったものの

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

「実際には表示されません」とは言いませんが、それほど進んでいません。エンティティまたはUnicodeのコンテンツは正常に動作するはずですので、おそらく他の何か間違っているでしょう。また、その見通しを考えると、HTML処理に関しては迷惑になることがあります。 – Synchro

答えて

0

、回避策はただの私の$メッセージ変数をラップした使用html_entity_decodeはメール本文に設定するときに機能します。私はTinyMCEからデータを正しく渡すことを好みましたが、何らかの理由でエンティティエンコーディングを完全に無効にすることはできません。

$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>'; 
}