2014-01-20 2 views
1

이 페이지는 가로 메뉴에서 'Contact'을 클릭하면 다른 html 페이지에로드됩니다.이메일을 보내기위한 Jquery와 PHP 문의 양식

전혀 실행되지 않게하려면 $(document).ready(function()을 제거해야했습니다.

실제로 이메일을받지 못하는 것 외에는 모든 것이 작동하는 것처럼 보입니다. 아이디어가 있으십니까?

감사합니다. 여기

contact.html입니다 :

<script type="text/javascript"> 
    $("#submit_btn").click(function() { 
     //collect input field values 
     var user_name  = $('input[name=name]').val(); 
     var user_email  = $('input[name=email]').val(); 
     var user_message = $('textarea[name=message]').val(); 

     //simple validation at client's end 
     //we simply change border color to red if empty field using .css() 
     var proceed = true; 
     if(user_name==""){ 
      $('input[name=name]').css('border-color','red'); 
      proceed = false; 
     } 
     if(user_email==""){ 
      $('input[name=email]').css('border-color','red'); 
      proceed = false; 
     } 
     if(user_message=="") { 
      $('textarea[name=message]').css('border-color','red'); 
      proceed = false; 
     } 

     //everything looks good! proceed... 
     if(proceed) 
     { 
      //data to be sent to server 
      post_data = {'userName':user_name, 'userEmail':user_email, 'userMessage':user_message}; 

      //Ajax post data to server 
      $.post('contact_me.php', post_data, function(data){ 

       //load success massage in #result div element, with slide effect.  
       $("#result").hide().html('<div class="success">'+data+'</div>').slideDown(); 

       //reset values in all input fields 
       $('#contact_form input').val(''); 
       $('#contact_form textarea').val(''); 

      }).fail(function(err) { //load any error data 
       $("#result").hide().html('<div class="error">'+err.statusText+'</div>').slideDown(); 
      }); 
     } 

    }); 

    //reset previously set border colors and hide all message on .keyup() 
    $("#contact_form input, #contact_form textarea").keyup(function() { 
     $("#contact_form input, #contact_form textarea").css('border-color',''); 
     $("#result").slideUp(); 
    }); 
</script> 

<fieldset id="contact_form"> 
<div id="result"></div> 
    <label for="name"><span>Name</span> 
    <input type="text" name="name" id="name" placeholder="Enter Your Name" /> 
    </label> 

    <label for="email"><span>Email Address</span> 
    <input type="text" name="email" id="email" placeholder="Enter Your Email" /> 
    </label> 

    <label for="message"><span>Message</span> 
    <textarea name="message" id="message" placeholder="Enter Your Name"></textarea> 
    </label> 

    <label><span>&nbsp;</span> 
    <button class="submit_btn" id="submit_btn">Submit</button> 
    </label> 
</fieldset> 

그리고 여기 contact_me.php에게 있습니다

<?php 
if($_POST) 
{ 
    //check if its an ajax request, exit if not 
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { 
     die(); 
    } 

    $to_Email  = "@gmail.com"; //Replace with recipient email address 
    $subject  = 'ContactUS'; //Subject line for emails 

    //check $_POST vars are set, exit if any missing 
    if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"])) 
    { 
     die(); 
    } 

    //Sanitize input data using PHP filter_var(). 
    $user_Name  = filter_var($_POST["userName"], FILTER_SANITIZE_STRING); 
    $user_Email  = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL); 
    $user_Message  = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING); 

    //additional php validation 
    if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error. 
    { 
     header('HTTP/1.1 500 Name is too short or empty!'); 
     exit(); 
    } 
    if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation 
    { 
     header('HTTP/1.1 500 Please enter a valid email!'); 
     exit(); 
    } 
    if(strlen($user_Message)<5) //check emtpy message 
    { 
     header('HTTP/1.1 500 Too short message! Please enter something.'); 
     exit(); 
    } 

    //proceed with PHP email. 
    $headers = "From: $user_Email\n" . 
    "Reply-To: $user_Email\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: text/html\n" . 
    "X-Mailer: PHP/" . phpversion(); 

    @$sentMail = mail($to_Email, $subject, $user_Message .' -'.$user_Name, $headers); 

    if(!$sentMail) 
    { 
     header('HTTP/1.1 500 Couldnot send mail! Sorry..'); 
     exit(); 
    }else{ 
     echo 'Hi '.$user_Name .', Thank you for your email! '; 
     echo 'Your email has already arrived in my Inbox, all I need to do is Check it.'; 
    } 
} 
?> 

솔루션 : 내가 Dreamhost를 사용하고 메일을 보내려고했다 DreamHost 서버에서 "From : @gmail"계정을 사용합니다. dreamhost @mydomain 이메일을 만들어서 거기에서 보내야했습니다. 전자 메일 로그를 확인하고이 오류를 보았습니다. 550 5.7.1 보낸 사람 도메인이 허용되지 않습니다. 여기에서 읽을 수 있습니다 : http://wiki.dreamhost.com/PHP_mail()

+0

'@'을 제거하면 오류 메시지가 표시되지 않습니다. 또한 메일 서버를 설정 했습니까? –

+0

@을 삭제하고 HTTP 500 오류를 추가하고 모든 헤더를 \ r \ n (으)로 변경했습니다. 그래도 작동이 안되는. 나는 Dreamhost에게 지원 티켓을 보냈습니다. – JavaNinja

답변

2

여기에는 여러 가지 문제가있을 수 있습니다.

첫째, die()은 적절한 오류 처리를 대체하지 못합니다. 최소한 코드에서 다른 오류 사례 중 일부를 수행하는 것처럼 HTTP 500 오류를 반환하십시오.

두 번째로 RUJordan이 규정 한대로 @은 오류 메시지를 표시하지 않습니다. 또한 메일 서버가 없을 수도 있습니다. 당신은 (개발 환경에서만) error_reporting(E_ALL) 함수를 사용해야합니다.

셋째로, 에 설명 된대로 \r\n이 아닌 \n으로 이메일 헤더를 구분해야합니다. 마지막 헤더도 \r\n이어야합니다.

넷째, 사용자의 이메일 주소 ("[email protected]"사용)에서 서버를 통해 ("yourdomain.com"을 사용하십시오) 전자 메일을 보내는 것이 일반적인 스팸 전술이며 종종 전자 메일이 스팸으로 신고 될 수 있습니다 및/또는 자동으로 삭제됩니다 (Gmail에서이 작업을 완료했습니다). "[email protected]"에서 보내보십시오. 이제 서버가 자체 도메인에서 전자 메일을 보내므로 더 신뢰할 수 있습니다. 그럼에도 불구하고 스팸 폴더를 확인해야하지만이 단계는받은 편지함이나 스팸 폴더에 도달하기 전에 Gmail이 Gmail을 삭제할 가능성을 줄입니다.

마지막으로 메일 서버에로드가 발생할 수 있습니다. 이메일은 즉시 배달되지 않을 수 있습니다. 몇 시간까지 기다려보십시오 (tumblr 한 번 지연이 오래). 또한 관리되는 호스팅 플랫폼 인 경우 모든 사항을 호스트와 확인하십시오.

+0

해결해야 할 사항 목록을 보내 주셔서 감사합니다. Dreamhost를 통해 내 Gmail 계정을 사용하여 이메일을 보냈습니다. dreamhost 이메일 @mydomain을 만들어야했습니다. – JavaNinja

-1

많은 이유가있을 수 있습니다. php.ini의 smtp.host 설정이 맞으면 메일 서버가 작동하는지 확인하십시오. 외부 이메일 주소 (예 : Google 이메일)를 사용하여 메일 서버가 메시지를 보낼 수 있어야합니다. Gmail에는 메일 서버의 추가 설정이 필요한 보내는 메일에 대한 인증 및 SMTPS가 필요합니다. 또한 스팸 폴더를 확인하십시오!

+1

# 1 - 이것은 주석이어야합니다. # 2 당신은 php'mail' 함수를 통해'smtp '를 사용할 수 없습니다. # 3 Gmail 인증은이 질문과 아무 관련이 없습니다. -1 주위에. – Ohgodwhy

+0

@Ohgodwhy # 2 : http://www.php.net/manual/en/mail.configuration.php, 이것을 확인하려면 이메일을 보내려면 Windows php에서 smtp를 설정해야합니다. # 3, 또한 Google의 메일 서버가 로컬 메일 서버에서 메일을 받으면 인증이 필요합니다. – Vinh