2012-04-16 21 views
0

私は次のメールスクリプトを使用していますが、問題はそれがいくつかの文字を変換することです。 典型的なメールは次のようになります。PHPメールスクリプトの改行と特殊文字

Neue Nachricht von Mustermann, Max ([email protected]): 
Hallo Herr Platzhalter,
wie soeben besprochen, würden wir gern ein 
"Schild" mit der Aufschrift "Aufschrift" bei Ihnen 
bestellen.
Bitte teilen Sie uns doch mit, wie wir da 
verfahren müssen ... 
Ihnen einen schönen 
Urlaub!
Familie Mustermann 

私はこの($メッセージ=にfilter_varは($ _ POST [ 'メッセージ']、FILTER_SANITIZE_SPECIAL_CHARS);)ことを推測するだろう、それを台無しに。だから私はそれを安全でないものにすることなくそれをどうやって変えるのですか?そして、そのスクリプトに追加しなければならない他の改善点はありますか?

<?php 
    //Enter your email here 
    $your_email = "mymail"; 
    //Enter the subject of the mail here 
    $subject = "Kontakt Webseite"; 


    $name = $_POST['name']; 
    $email = $_POST['email']; 
    //Filter HTML characters 
    $message = filter_var($_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS); 

    $error = "Fehler: "; 

    //Default message if unsuccessful and no other reason found 
    $return_message = $error."Leider hat das Versenden der Nachricht nicht geklappt, bitte schreiben Sie mir direkt an ".$your_email." eine E-Mail"; 
    if(strlen($name) > 0 && strlen($email) > 0 && strlen($message) > 0) { 
     if(filter_var(filter_var($email, FILTER_VALIDATE_EMAIL), FILTER_SANITIZE_EMAIL)) { 
      try { 
       $body = "Neue Nachricht von ".$name." (".$email."):\n".$message; 
       $header = "From: ".$email; 
       mail($your_email, $subject, $body, $header); 
       $return_message = "Die Nachricht wurde erfolgreich versendet, ich melde mich schnellst möglich bei Ihnen"; 
      } 
      catch(Exception $e) { } 
     } else { 
      $return_message = $error."Ihre E-Mail Adresse scheint ungültig zu sein."; 
     } 
    } else { 
     $return_message = $error."Ein oder mehrere Felder waren nicht ausgefüllt.";  
    } 
    echo $return_message; 
?> 
+0

メールで送信する文字列をエスケープする必要がありますか? PHPは問題を処理しますが、それはあなたがMySQLクエリのために使用しているようではありません。 – gosukiwi

+0

私にはわかりません。私はPHPの経験はほとんどありません。そのスクリプトは購入したテンプレートに含まれています。私はそれがセキュリティ関連のものだと思っていて、質問しないで何かを混乱させたくないと思った;) – kannix

答えて

0

それは本当にやっているだろう唯一のことは、受信側のクライアントがそれを適切に処理できることを確認しようとしている、そしてその任意の保証はとにかくそこことはない。この場合、P

、それはあなたの特別なを回しています文字をHTMLエンティティ(\n - >&#10など)に挿入すると、メールを破損して、再度修正する必要がありません。フィルタを取り除くと、あなたはいいはずです。

+0

あなたの答えに感謝します。私はこのフィルターを削除します.. http://safalra.com/programming/php/contact -feedback-form /)彼らは次のようなものを使っています:$ crack = eregi( "(\ r | \ n)(to:| from:| cc:| bcc :)"、$ body);私はそれのようなものを追加すべきか、あるいはそれは時代遅れですか? – kannix

1

Slokunは有効なポイントを作成します。電子メールの内容は、HTMLエンティティが含まれており、別の言語にあるように見えるように加え、電子メールクライアントを受信することにより、正しいレンダリングを保証するために、電子メールのヘッダに以下を追加する良いでしょう:

置き換えます

$header = "From: ".$email; 

$header = "From: " . $email . "\r\n"; 
$header .= "Content-type: text/html; charset=utf-8" . "\r\n"; 

編集:で

はあなたのスクリプトで上記の行を含める場合は、HTMLエンティティをサニタイズ行を削除する必要はありません、と述べました。あなたの問題は、現時点では、電子メールクライアントを受け取ることは電子メールコンテンツをHTMLではなく純粋なテキストとして解釈することではないということです。

+0

[OK]を、HTMLメールとして送信することをお勧めします:) Slokuns投稿の下で私のコメントについてどう思いますか? – kannix

+0

@kannix私はこれまで実装形態を見てきたとは言えませんが、膨大な数のメールスクリプトを作成したことに慣れていません。通常、私はホイールを再発明せず、十分に確立された検査済みスクリプトを使用しないようにします。 phpMailerの良い例:http://phpmailer.worxware.com/ – trickyzter

+0

@kannixどういうわけか正規表現を利用していますが、 'ereg'を 'preg_match'と置き換えることを保証しているのであれば、php 5.3 – trickyzter