ugrás a tartalomhoz

PHP Mail Karakterkódolás

KardiWeb · 2011. Aug. 2. (K), 12.33
Sziasztok!

Lenne egy müködő php mail küldő kódom. Annyi vele csak a baj, mikor elküldöm a levelet és van benne ékezet akkor kriksz kraxok lesznek az ékezetek helyett. pl:öüüóúőéáűĂ

Mit hagyhattam ki és honnan?
A kód:
 <?php
  		if(isset($_POST['submit'])) {
          error_reporting(E_NOTICE);
          function valid_email($str)
          {
          return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
		     } 
          if($_POST['name']!='' && $_POST['email']!='' && valid_email($_POST['email'])==TRUE && strlen($_POST['comment'])>1)
          {
              $to = preg_replace("([\r\n])", "", hexstr($_POST['receiver']));
			  $from = preg_replace("([\r\n])", "", $_POST['email']);
			  $subject = "Üzenet az oldalrol: ".$_POST['name'];
              $message = $_POST['comment'];
			  
			  $match = "/(bcc:|cc:|content\-type:)/i";
				if (preg_match($match, $to) ||
					preg_match($match, $from) ||
					preg_match($match, $message)) {
				  die("Header injection detected.");
				}
              $headers = "From: ".$from."\r\n";
   			  $headers .= "Reply-to: ".$from."\r\n";

        if(mail($to, $subject, $message, $headers))
              {
                  echo 1; //SUCCESS
              }
              else {
                  echo 2; //FAILURE - server failure
              }
          }
          else {
       	  echo 3; //FAILURE - not valid email

          }
		  }else{
			 die("Direct access not allowed!");
		   }
			function hexstr($hexstr) {
				  $hexstr = str_replace(' ', '', $hexstr);
				  $hexstr = str_replace('\x', '', $hexstr);
				  $retstr = pack('H*', $hexstr);
				  return $retstr;
				}
      ?>
Előre is köszönöm a segítségeteket!
 
1

Osztály

Poetro · 2011. Aug. 2. (K), 12.45
A fenti adatok UTF-8 kódolással érkeznek. Ekkor a legegyszerűbb, ha használsz egy email küldő osztályt, ami megoldja neked a karakterkódolási problémákat, valamint nem kell küzdened például a header injectionnel, mert azt is megoldja helyetted. Ilyen a PHPMailer vagy a SwiftMailer illetve a PEAR-es Mail és Mail_Mime kombinációja.
2

Gyors piszkálás: a fenti

kuka · 2011. Aug. 2. (K), 12.48
Gyors piszkálás: a fenti állomány 23. sorához beszúrni ilyent:

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; // vagy amilyen kódolásúak a karaktereid
Megoldás: PHP mail küldő osztályt használni, például PHPMailer.
3

Megvan a megoldás.

KardiWeb · 2011. Aug. 2. (K), 12.52
Kedves "Kuka"!

Nagyon szépen köszönöm a hozzászólásotokat! A te megoldásod tökéletes és működik! Mégegyszer nagyon szépen köszönöm a segítséget mind a kettötöknek!