2016-06-23 1 views
0

메일 기능에 헤더를 추가하려고하면 작동하지 않습니다. 그러나 내 코드는 좋은 것 같습니다.헤더에서 메일 PHP

어쩌면 동적 'From'헤더를 만들 수 없습니까?

var message = ""; 
var nomClient = $("#nom").val(); 
var mailClient = $("#mail").val(); 

$.ajax({ 
      method: "POST", 
      url: "traitement.php", 
      data: { monMessage: message, mailDuClient: mailClient, nomDuClient: nomClient } 
     }) 

     /* Si succès */ 
     .done(function() { 
      // Bug : le champs mail restait visible, donc on le cache 
      $("#mail").addClass("cacher"); 
      // Affiche le message de succès 
      $(".succes").animate().css("display", "block"); 
      // On attends 3,5 secondes puis on rafraichi la page 
      setTimeout(function(){location.reload();}, 3500); 
     }) 

     /* Si échec */ 
     .fail(function(jqXHR, textStatus, errorThrown) { 
      alert('Un problème est survenu'); 
     }); 

그리고 이것은 내 PHP 코드입니다 : 나는 당신이 제공 한 코드를 잘못 아무것도 표시되지 않습니다

$to = "[email protected]"; 
$objet = "Nouvelle demande de devis"; 
$headers = 'From: '. $_POST['nomDuClient'] . ' <' .$_POST['mailDuClient']. '>'. "\r\n"; 
//'X-Mailer: PHP/' . phpversion(). "\r\n"; 

$mail = mail($to, $objet, $_POST['monMessage'], $headers); 
echo($mail); 

메일이 제대로

+2

'PHP' 메일 기능 대신'PHPMailer' 클래스 사용 시도 – Apoorv

+0

나는 새로운 클래스를 추가 할 시간이 없다고 생각합니다. 실제로 메일 주소가 맞으면 메일이 올바르게 전송됩니다! 예를 들어 [email protected]이 작동하지만 [email protected]이 작동하지 않습니다 ... – Emilien

+0

사용자가 제공 한 데이터 ('$ _POST')를 위생 처리하지 않고 메일 헤더에 직접 입력하면 효과적으로 메일 릴레이. 스패머 **가 **이를 찾아서 악용합니다. (예를 들어 :'$ _POST [ 'mailDuClient']'를 [email protected]으로 설정하여 \ r \ n 다음을 수행하십시오 : [email protected] \ r \ n 제목 : 스팸 \ r \ n \ r \ n') 대신 PHPMailer와 같은 라이브러리를 사용해야합니다.이 라이브러리는 이미 이런 종류의 문제를 해결했습니다. –

답변

0

"에서"그러나없이 전송됩니다. 할 수있는 일은 다음과 같습니다.

$to = "[email protected]"; 
$objet = "Nouvelle demande de devis"; 
$headers = 'From: '. $_POST['nomDuClient'] . ' <' .$_POST['mailDuClient']. '>'. "\r\n"; 
//'X-Mailer: PHP/' . phpversion(). "\r\n"; 

$message = "headers:[$headers]\nmessage:\n".$_POST['monMessage'] 

$mail = mail($to, $objet, $message, $headers); 
echo($mail); 

이렇게하면 메시지 자체에 헤더가 포함 된 메일이 전송됩니다. 거기에서 그들이 옳았는지, 또는 빠진 것이 있는지 볼 수 있습니다.

+0

나는 메일에 헤더를 넣고 싶지 않다. ^^ 그러나 메일 주소가 틀리면 (예를 들어 존재하지 않는다) 메일도 보내질 것인가? – Emilien

+0

메일에 헤더를 넣고 싶지 않다는 것을 알고 있습니다. 하지만 헤더에 문제가있어 코드를 디버깅해야합니다. 디버깅의 한 가지 방법은 헤더에 무엇이 있는지 살펴 보는 것입니다. 그렇게하는 간단한 방법은 이메일에 넣는 것입니다. 관련없는 질문 : 예, PHP는 모든 이메일을 보내려고합니다. 메일 서버가'to : '메일 주소가 없으면 메일 서버가 그렇게하지 못합니다. –

+0

다음과 같이 코드를 수정했습니다. $ headers = 'From :'. $ _POST [ 'mailDuClient']. "\ r \ n"; 그리고 이제 메일은 [email protected] 주소로 보내지 만 ... 다른 주소를 입력하면 작동합니다! @KIKO 소프트웨어 코드가 작동하고 있습니다. 메일에서 '보낸 사람'과 '받는 사람'에 대한 좋은 값을 가지고 있습니다. – Emilien