2016-10-20 1 views
0

양식을 작성하고, 입력을 검증하고, 해당 데이터를 삭제하고, 전자 메일로 보내는 방법을 배우려고합니다. HTML 양식을 만들고 통합하는 것으로 시작했습니다.jquery-validation을 사용하여 문의 양식을 제출하고 전자 메일로 보내려고합니다. 유효성 검사를 통과했지만 메일이 수신되지 않음

클라이언트 측 유효성 검사는 훌륭하게 작동하는 것으로 보이며, 내 규칙이 지정되지 않은 경우 사용자가 "제출"할 수 없습니다. 그러나 실제로 처리 방법 및 메일이 양식을 자신에게 이해하는 데 어려움을 겪고 있습니다. 알 수 있듯이, 아약스는 성공적으로 PHP 처리 페이지로 데이터를 전달하지만 내 이메일에는 데이터를받지 못합니다.

HTML 형태 :

<form id="contact-form" role="form" enctype="multipart/form-data" method="post" action=""> 
<input type="text" placeholder="First Name *" name="firstName" id="firstName"> 
<input type="text" placeholder="Last Name *" name="lastName" id="lastName"> 
<input type="text" placeholder="Street Address *" name="address" id="address" > 
<select name="state" id="state" > 
    <option value="" disabled selected style="display:none;">State *</option> 
    <option value="AL">Alabama</option> 
    <option value="AK">Alaska</option> 
    <option value="AZ">Arizona</option> 
</select> 
<input type="text" placeholder="Zip *" name="zip" id="zip" > 
<input type="tel" placeholder="Phone Number *" name="phone" id="phone"> 
<input type="email" placeholder="Email Address (optional)" name="email" id="email">       
<textarea rows="3" placeholder="Additional Message (optional)" name="message" id="message"></textarea>  
<input type="submit" id="submit-button" value="Send Message"> 
</form> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.min.js"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/additional-methods.min.js"></script> 
<script src="js/validation.js"></script> 

Validation.js :

$(function() { 

$("#contact-form").validate({ 
    rules: { 
     firstName: { 
      required: true 
     }, 
     lastName: { 
      required: true 
     }, 
     address: { 
      required: true 
     }, 
     state: { 
      stateUS: true, 
      required: true 
     }, 
     zip: { 
      zipcodeUS: true, 
      required: true 
     }, 
     phone: { 
      phoneUS: true, 
      required: true 
     }, 
     email: { 
      email: true 
     }, 
     method: { 
      lettersonly: true, 
      required: true 
     } 
    }, 
    messages: { 
     email: { 
      email: 'Please enter a valid email address.' 
     } 
    }, 
    submitHandler: function(form) { 
     $.ajax({ 
      type: "POST", 
      url: "/test/mail.php", 
      data: $(form).serialize(), 
      timeout: 3000, 
      success: function() {alert('works');}, 
      error: function() {alert('failed');} 
     }); 
     return false; 
    } 
}); 
}); 

mail.PHP :

<?php 

    $firstName = $lastName = $address = $state = $zip = $phone = $email = $method = $message = ""; 
    $email_subject = $email_message = $headers = ""; 
    $email_to = "[email protected]"; 

    $firstName = test_input($_POST["firstName"]); 

    $lastName = test_input($_POST["lastName"]); 

    $address = test_input($_POST["address"]); 

    $state = test_input($_POST["state"]); 

    $zip = test_input($_POST["zip"]); 

    $phone = test_input($_POST["phone"]);                

    $email = test_input($_POST["email"]); 

    $message = test_input($_POST["message"]); 

    $email_subject = "New Meeting Request - ".$name;   
    $email_message = "Details below:\n\n";              
    $email_message .= "First Name: ".$firstName."\n\n"; 
    $email_message .= "Last Name: ".$lastName."\n\n"; 
    $email_message .= "Address: ".$address."\n\n"; 
    $email_message .= "State: ".$state."\n\n"; 
    $email_message .= "Zip Code: ".$zip."\n\n"; 
    $email_message .= "Phone Number: ".$phone."\n\n"; 
    $email_message .= "Email Address: ".$email."\n\n"; 
    $email_message .= "Additional Message: ".$message."\n\n"; 

    $headers = 'From: PHP Form'."\r\n". 
    'Reply-To: N/A'."\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 
    @mail($email_to, $email_subject, $email_message, $headers); 

    return true; 

    function test_input($data) { 
     $data = trim($data);     //trims whitespace on both ends 
     $data = stripslashes($data);   //removes extra slashes 
     $data = htmlspecialchars($data);  //converts special characters to HTML equivalents 
     return $data;      //returns cleaned data 
    } 

?> 
+0

무엇이 잘못되었는지 보려면 메일 오류를 억제하지 않는다. 스크립트가 오류 메시지를 리턴하면 Ajax 콜백에 전달하십시오. '성공 : function (data) {alert (data);}' –

+0

감사합니다. 내가 @ 명령으로 억압하고 있다는 것을 몰랐습니다. 나는 @mail()을 삭제하고 mail()로 변경했다. 나는 아직도 성공 메시지를 받는다. 오류는 표시되지 않습니다. –

+0

내 답변에 제안을 참조하십시오. –

답변

0

메일()를 functi on은 결과로 boolean을 반환합니다. 메시지를 가져 오기 위해 오류보고 수준을 일시적으로 변경하고 메일을 사용한 후에 다시 설정해야합니다.

mail.php

... 
$errLevel = error_reporting(E_ALL); // display all error messages 

if(!mail($email_to, $email_subject, $email_message, $headers)) 
    echo 'Error sending email'; 
else echo 'All is fine'; 

error_reporting($errLevel); // restore old error levels 

//return true; //this is not needed 

Validation.js

submitHandler: function(form) { 
     $.ajax({ 
      type: "POST", 
      url: "/test/mail.php", 
      data: $(form).serialize(), 
      timeout: 3000, 
      success: function(data) {alert(data);}, 
      error: function() {alert('failed');} 
     }); 
     return false; 
    } 
0

는 조금 땜질 후, 메일() 함수는 정확한 결과를 반환하는 것을 확인할 수 있었다.

문제는 호스팅 제공 업체 및 고객의 이메일 설정 문제로 인해 발생합니다.

전자 메일 서버가 다른 곳에서 호스팅되는 경우 (필자의 경우 privateemail.com) 분명히 PHP를 사용하여 mail()을 보낼 수 없습니다. 의미가 있지만 내 코드가 실제로 올바르다 고 생각하지 않았습니다.

이 작업을하려면 PHP의 mail() 함수 대신 SMTP -> mail 함수를 사용해야했습니다. 나는 PHPMailer Plugin을 이용하여 이것을 수행했다 : https://github.com/PHPMailer/PHPMailer

관련 문제