0

Web ページから HTML 入力を受け取り、それを HTML メールとして送信するスクリプトを作成しました。何らかの理由で、入力に存在しない外部文字 (通常は感嘆符) が受信トレイに届く電子メールに表示されます。隠し文字を確認しましたが、ありません。入力はコピペではなく直接入力です。前後の例です。

入力:

<p>Katherine Kemler, LSU flute professor, will perform at 7:30 p.m. Feb. 1 in Wattenbarger Auditorium. The performance is free and open to the public.</p>

出力: http://img42.com/LKEou Feb. と 1 の間と Watt の後に間違った文字が表示されます。チェックしたすべてのクライアントで同じであるため、メールクライアントではないと思います。

ISO-8859-1 の代わりに UTF-8 エンコーディングを使用する、本文で base64_encode() を使用する、content-transfer-encoding を 8 ビットに設定するなどのことを試すようになった他の質問をいくつか読みましたが、どれもそれはうまくいきました。998 文字の後に改行が必要なことについて何か読んだことがありますが、これらの感嘆符はそれを示唆する形で表示されません。上記の私の例では、次から次へと 10 文字しか続きません。これが私のスクリプトです:

<?php

if(!isset($_GET["id"])) return "<span class=\"text-error\">No ID specified.</span>"; //this should never happen

$id = $_GET["id"];
$ok = false;
$students = //redacted
$facstaff = //redacted
$studentsBCC = //redacted
$facstaffBCC = //redacted
$subject = "Tech Times for ".date("m/d");
$headers = "From: \"Tennessee Tech University\" <techtimes@tntech.edu>\r\n".
    "Reply-to: no-reply@tntech.edu\r\n".
    "MIME-Version: 1.0\r\n".
    "Content-Transfer-Encoding: 8bit\r\n".
    "Content-type: text/html; charset=UTF-8\r\n".//iso-8859-1\r\n".
    "X-Mailer: PHP/".phpversion();

$resource = $modx->getObject("modResource", $id);
if(is_null($resource)) return "<span class=\"text-error\">Failed to get Resource $id</span>"; //this should never happen either

//get the template and insert the content
$body = $modx->getChunk("techtimes", array("copy"=>$resource->getContent(), "headerimg"=>$resource->getTVValue("headerImg")));

//check to see if this is a test run and if so reassign destination email address and empty BCCs
if(isset($_GET["email"])){
    $facstaff = $_GET["email"];
    $students = $_GET["email"];
    $studentsBCC = "";
    $facstaffBCC = "";
}

switch($id){
    case 50:    $ok = mail($facstaff,$subject,$body,$headers."\r\nBcc:".$facstaffBCC); break;
    case 51:    $ok = mail($students,$subject,$body,$headers."\r\nBcc:".$studentsBCC); break;
    default:    return "<span class=\"text-error\">Invalid or no ID specified for Tech Times.</span>"; //this, too, should never happen
}

if($ok){
    $output = "<span class=\"text-success\">Tech Times for <strong>".(($id == 50) ? "Fac/Staff" : "students")." ($id)</strong> has been sent to <strong>".(($id == 50) ? $facstaff : $students)."</strong></span>.";
}else{ //this could happen if something goes wrong with the mailer
    $error = error_get_last();
    var_dump($error);
    $output = "<span class=\"text-error\">Failed to send Tech Times!</span>";
}

return $output;
?>

MODx Revolution を使用して出力をフォーマットしています。私は困惑しています。ヘルプ?ありがとう!

4

0 に答える 0