2016-06-29 4 views
0

PHP를 사용하여 이메일을 보내려고합니다. 아래 코드를 가지고 있습니다 :PHP로 이메일 보내기 -받지 못했습니다

$action=$_REQUEST['action']; 
    if ($action=="") /* display the contact form */ 
    { 
    ?> 
    <form action="" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="submit"> 
    Your name:<br> 
    <input name="name" type="text" value="" size="30"/><br> 
    Your email:<br> 
    <input name="email" type="text" value="" size="30"/><br> 
    Your message:<br> 
    <textarea name="message" rows="7" cols="30"></textarea><br> 
    <input type="submit" value="Send email"/> 
    </form> 
    <?php 
    } 

else    /* send the submitted data */ 
{ 
$name=$_REQUEST['name']; 
$email=$_REQUEST['email']; 
$message=$_REQUEST['message']; 
if (($name=="")||($email=="")||($message=="")) 
    { 
    echo "All fields are required, please fill <a href=\"\">the form</a> again."; 
    } 
else{  
    $from="From: $name<$email>\r\nReturn-path: $email"; 
    $subject="Message sent using your contact form"; 
    mail("[email protected]", $subject, $message, $from); 
    echo "Email sent!"; 
    } 
} 

누락 된 필드를 채우고 제출 버튼을 클릭했습니다. 이 페이지는 이메일이 전송되었음을 표시하지만 이메일을 체크했을 때받은 이메일이 없었습니다. 내 코드에 어떤 문제가 있습니까?

+0

시도의 phpmailer있다. mail()이 모든 서버에서 제대로 작동하지 않기 때문입니다. –

+0

if (mail ("[email protected]", $ subject, $ message, $ from)) {echo "이메일을 배달 할 수 있습니다!"; } else {echo "이메일을 보낼 수 없습니다!"; }', 오해의 소지가 적은 출력은 최소한 :) – NICK

+0

코드를 디버깅하십시오 error_reporting (E_ALL); ini_set ('display_errors', '1'); – Dave

답변

1

먼저 메일 코드가 작동하는지 확인하십시오.

시도해보십시오.

if(mail("[email protected]", $subject, $message, $from)){ 
    echo "success"; 
}else{ 
    echo "fail"; 
} 

어떤 메시지가이 조건에서 왔는지 확인하십시오.

+0

mailhost()를 localhost에서 구성하기가 어렵 기 때문에 실제 서버에서 시도하십시오. –

1

시도해보십시오.

<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="submit"> 
    Your name:<br> 
    <input name="name" type="text" value="" size="30"/><br> 
    Your email:<br> 
    <input name="email" type="text" value="" size="30"/><br> 
    Your message:<br> 
    <textarea name="message" rows="7" cols="30"></textarea><br> 
    <input type="submit" name="submit" value="Send email"/> 
    </form> 
    <?php 
if(isset($_POST["submit"])){ 
$name=$_REQUEST['name']; 
$email=$_REQUEST['email']; 
$message=$_REQUEST['message']; 
if (($name=="")||($email=="")||($message=="")) 
    { 
    echo "All fields are required, please fill <a href=\"\">the form</a> again."; 
    } 
else{  
    $from="From: $name<$email>\r\nReturn-path: $email"; 
    $subject="Message sent using your contact form"; 
    mail("[email protected]", $subject, $message, $from); 
    echo "Email sent!"; 
    } 
} 
1

첫 번째 것은 당신이

http://php.net/manual/en/function.mail.php#refsect1-function.mail-returnvalues

그래서 당신이 필요가 있음을 알려줄 수있는 false를 실패한 수 있기 때문에, mail 함수의 결과를 확인하고 반환해야한다 :

if (mail("[email protected]", $subject, $message, $from)) { 
    echo "Email sent!"; 
} else { 
    echo "Can't send the email!"; 
} 

Can't send the email이 표시되면 로그 파일을 확인하십시오.

  • 모든 것은 PHP & 사이트 설정에서 올바르게 구성되었습니다.
  • 호스트에서 메일 서버에 연결할 수 있습니다.

그렇다면 여전히 이메일을받을 수 없는데 Email sent!이라고 표시되면 어떻게됩니까?

음, mail 기능은 반환 true 때,이 메일 서버에 확인의 :

메일이 성공적으로 의미 전달

주의 말씀 *accepted* for delivery, 허용 된 지금, 내 일은 끝났어. 메일이 사용자에게 전달되는지 여부는 아직 확실하지 않습니다.

이메일 시스템이 복잡합니다. 방금 "보낸"이메일은 여러 서버를 거쳐 목적지에 도달 할 수 있습니다. 중간에있는 모든 서버는 운송을 지연 시키거나 취소 할 수 있습니다.

악화 될 경우 사용자 또는 사용자의 이메일 제공 업체가 필터링하여 'n'하여 이메일을 삭제할 수 있습니다. 보안 조치를 위해, 그들은 그것에 대해 아무것도 알지 못하게합니다. 이메일이 mail 기능 또는 PHPMailertrue 결과를 반환하는 경우에도 사용자에 도달하는 경우

그래서 당신은 실제로 알 수 없었다. 당신이 확신 할 수있는 유일한 것은 메일이 유능한 메일 서버에 배달된다는 것입니다.당신이 당신의 자신의 메일 서버를 구축하려는 경우