2014-12-18 2 views
-1

이름, 전화 번호 및 선택적 설명 섹션이 필요한 등록 양식이 있습니다. 여러 테스트를 실행 한 후 폼이 제출되고 (PHP 코드의 맨 아래) 페이지가 "감사 페이지"로 리디렉션됩니다. 그러나 이메일을 전혀받지 못합니다. 누구든지 내가 뭘 잘못하고 있는지 알아?내 HTML 양식을 제출했지만 이메일을받지 못했습니다.

<form class="register-form" name="registerform" method="post" action="form-to-email.php"> 

      <div class="form-column"> 

       <p>Fields marked with * are required.</p> 

       <label for="first_name">First Name *</label> 
       <input type="text" id="first_name" name="first_name" placeholder="John"> 

       <label for="last_name">Last Name *</label> 
       <input type="text" id="last_name" name="last_name" placeholder="Smith"> 

       <label for="phone">Phone Number</label> 
       <input type="text" id="phone" name="phone" placeholder="503 999 9999"> 

       <label for="comments">Comments</label> 
       <textarea id="comments" name="comments"></textarea> 

      </div><!--/ Form Column --> 

      <div class="submit-wrap"><input class="submit-form" type="submit" value="Register" /></div> 

     </form><!--/ Form --> 

는 PHP는 다음과 같습니다 :

<?php 

$myemail = '[email protected]'; 

$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$visitor_phone = $_POST['phone']; 
$comments = $_POST['comments']; 


$to = $myemail; 

$email_subject = "$first_name\n $last_name\n registered for Winter Camp 2015"; 

$email_body = "They said: \n $comments". "Their phone number is $visitor_phone.\n". 


$headers = "From: $myemail\n"; 

mail($to,$email_subject,$email_body,$headers); 

header('Location: registered-thanks.html'); 

>

+1

서버는 어떻게 설정됩니까? 서버에 필요한 비트 (예 : MTA 등)가 설치되어 있고 메일을 릴레이 할 수 있습니까? – slugonamission

+1

코드에 오류가 있습니다. '$ email_body ='는 세미콜론으로 끝나지 않습니다. – RST

답변

1

메일 배달 프로그래머의 POV에서 부정확 한 과학이다. 시스템 관리자는 좀 더 제어 할 수 있습니다 ... "박스 소유자"입니까?

당신은 메일() 호출이 실패 있는지 확인하지 않는 : 방법은 간단입니다 물론

$success = mail($to,$email_subject,$email_body,$headers); 

if ($success) header('Location: registered-thanks.html'); 

else die("Could not send mail!!"); 

... 더 나은 오류 처리는 좋은 시작이 될 것입니다.

($ success)가 true를 반환한다고 가정하면 올바른 일을하는 것이 시스템에 달려 있습니다. 질문해야 할 질문은 다음과 같습니다. PHP를 제대로 설치하여 mail()을 할 수 있습니까?

내 웹 호스트에서 허용합니까?

아웃 바운드 SMTP 연결을 차단하는 방화벽이 있습니까?

서버 로그 란 무엇입니까?

메일이 스팸 필터에 걸렸습니까? 메시지 전달을 위해 허용 될 때

내가 "부정확 한 과학」라고 왜 당신은 볼 수 있습니다 ....

+0

와우, 나는 그것이 훨씬 더 복잡하다는 것을 깨닫지 못했다. 나는 PHP에 들어 가지 않고 이것에 대해 연구하고 있었고 이러한 것들을 잡지 못했다. 그래도 도와 ​​줘서 고마워! 전체 산책로를 들여다 볼 수있는 장소가 있다면 도움이 될 것입니다. – Veech

+0

Google이 귀하의 친구일지도 모릅니다.약간 긴 PHP.net 문서는 시작하기에 좋은 곳입니다. 일반적으로 SMTP의 경우 "SMTP 설명"과 같은 것을 찾으십시오. mail()이 작동하는 경우가 종종 있지만 작동하지 않을 때까지 Sherlock Holmes와 같은 "게임이 진행 중"입니다. –

+0

또 다른 작은 문제로 @Veech, 메일 헤더는' \ r \ n'이 아니라'\ n'. – TRiG

1

PHP의 메일 기능은 true를 돌려줍니다. 이는 Kkinsey가 지적한 바와 같이 실제 배송 또는 배송 보장과 다릅니다.

웹 파일이 호스팅되는 서버에 대한 셸 액세스 권한이있는 경우이 방법을 사용하여 메일을 보낼 수 있는지 여부를 테스트 할 수 있습니다.

mail -s "Test Email" [email protected] 

텍스트 줄을 입력하고 한 줄에 하나씩 "."을 입력하십시오. 히트 리턴. Gmail 계정에서 메일을 찾으십시오.

또한 sendmail을 빠른 테스트로 직접 사용해 볼 수도 있습니다.

sendmail [email protected] 
0

스팸 폴더를 확인하셨습니까? 어떤 서비스는 reply-to 헤더가 없다면 전자 메일을 거부합니다.

$myemail = '[email protected]'; 
$to = $myemail; 

$headers = "From: $myemail \r\n"; 

$headers .= "Reply-To: $myemail \r\n"; 

$headers .= 'X-Mailer: PHP/' . phpversion(); 

$success = mail($to,$email_subject,$email_body,$headers); 

if ($success) header('Location: registered-thanks.html'); 

else die("Foobar. Your mom."); 
관련 문제