2016-10-30 1 views
0

웹 사이트에 대한 문의 양식을 작성 중입니다. jQuery를 사용하여 html 버튼에 .click() 함수를 만듭니다. 그런 다음 ajax를 사용하여 email.php 코드를 호출합니다. 버튼을 클릭하면 콘솔에 다음 오류가 표시됩니다.외부 PHP 이메일 요청 500 내부 서버 오류로 응답

500 (내부 서버 오류).

저는 아약스와 PHP를 처음 접했으므로이 시점에서 무엇을 해야할지 잘 모릅니다. 여기

는 HTML 양식입니다 :

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script src = "js/callmail.js"></script> 

</head> 

<body ng-app = ""> 

      <div class = "container"> 

    <form name = "contact"> 

     <label for = "subject" class = "control-label">Subject:</label> 
     <input name = "subject" id = "subject" ng-model = "subject" required/> 
     <span class = "warning" ng-show="contact.subject.$touched && contact.subject.$invalid">You Must Enter a subject!</span> 
     <span class = "success" ng-show="contact.subject.$touched && contact.subject.$valid">Valid!</span> 

     <br/> 

     <label for = "body" class = "control-label">Body:</label> 
     <input name = "body" id = "body" ng-model = "body" required/> 
     <span class = "warning" ng-show="contact.body.$touched && contact.body.$invalid">Your email must have a body!</span> 
     <span class = "success" ng-show="contact.body.$touched && contact.body.$valid">Valid!</span> 

     <br/> 

     <label for = "signature" class = "control-label">Return Email:</label> 
     <input name = "signature" id = "signature" ng-model = "signature" type = "email" required/> 
     <span class = "warning" ng-show="contact.signature.$touched && contact.signature.$invalid">You must enter a valid return email!</span> 
     <span class = "success" ng-show="contact.signature.$touched && contact.signature.$valid">Valid!</span> 

     <br/> 

     <button ng-disabled = "contact.$invalid" id = "sendmail" type = "submit" class = "btn btn-success">Submit</button> 

    </form> 

    </div> 

을 여기에 PHP 코드에 jQuery를/AJAX 호출입니다 :() {

$ (함수

$("#sendmail").click(function() { 

    var data = { 

     to: "myemail", 
     subject: $("#signature").val() + ": " + $("#subject").val(), 
     message: $("#body").val() 
    } 

    $.ajax({ 

     type: "POST", 
     url: "email.php", 
     data: data, 
     success: function() { 

      alert("Message sent"); 

     } 

    }); 

    console.log(data); 

}); 

});

그리고 마지막으로, 여기에 이메일 발송을 담당하는 PHP 코드입니다 : 어떤 도움을 크게 감상 할 수

<?php 
    if ($_POST["submit"]) { 

     $subject = $_POST["subject"]; 
     $message = $_POST["message"]; 
     $headers = "From: " . $_POST["name"] . "Reply to: " . $_POST["signature"]; 

     mail("myemail", $subject, $message, $headers)) 

    } 

?> 

은.

+1

아마도 오류가 아니지만 * data * JS 개체에 "제출"키가 없으므로 email.php에 if를 입력하지 마십시오. 그런 다음 메일 기능에서 이메일로 보이는 것을 넣으십시오. 마지막으로 SMTP 서버를 가지고 계시거나 * sendmail *을 구성하여 이메일을 보내시겠습니까? 정확히 무엇이 오류입니까? PHP가 오류를 표시하고 php.ini 파일을 업데이트하려고 시도합니다. – AnthonyB

+0

이 문제는 저도 모르지만 ECOWEBHOST는 로컬 서버가 아닙니다. 또한 데이터 객체에 제출 키를 어떻게 추가합니까? –

+0

당신의 이메일을 보내기 위해 smtp로 무엇을 사용하고 있습니까? 귀하의 이메일은 누구로부터 오는 것입니까? – Dom

답변

0

오류 500의 문제점은 구체적이지 않습니다. 그것은 단지 "무언가가 잘못되었다"는 것을 의미합니다. 오류 500만으로 많은 것을 진단하는 것은 불가능합니다.

오류 500의 원인은 무엇인지 알아야합니다. 오류 500의 위치는 PHP 오류 로그에 있습니다.

내가 묻는 첫 번째 질문은 PHP 환경을 어떤 환경에서 실행하고 있습니까? 컴퓨터에 설치되어 있습니까? 아니면 인터넷 서비스 제공 업체의 웹 서버에 있습니까? PC에서 개발 환경을 실행하지 않는다면 XAMPP와 같은 간단한 것을 설치하고 개발하는 것이 좋습니다. 고급 개발자에게는 이상적이지는 않지만 PHP를 배우는 데는 좋은 방법입니다. 그것은 적절한 오류 로그를 기록하지 적어도 때문에 실제로 액세스 읽기 :

다른 것은이 메일 기능에 대한 몇 가지 유용한 정보를 제공하는 PHP 문서를 살펴 보는 것입니다 수 있습니다

http://php.net/manual/en/mail.requirements.php

을 mail()은 sendmail 명령에 액세스 할 수있는 시스템에서 실행될 것으로 예상됩니다. PHP를 실행중인 시스템에 센드 메일이 없거나 센드 메일이 없을 경우 문제가 될 수 있습니다. 그러나 오류 로그를 보지 않고도 추측 할 수 있습니다.

제 조언은 먼저 PHP의 로컬 설치를 시도하는 것입니다. 또한 xampp을 사용하는 등 로컬에서 PHP를 실행하는 경우 메일을 보낼 때 사용하는 서버, 사용자 이름 및 암호 및 보안 정보와 같은 SMTP 서버 정보를 설정해야합니다. 하지만 훨씬 더 포괄적 인 로그 및 오류 정보에 액세스 할 수 있습니다.

+0

실제로 XAMPP에서 처음 시도했지만 정상적으로 작동했지만 localhost에서 실행 되었기 때문에 실제로 전자 메일을 보내지 않았습니다. 이제 ECOWEBHOST에서 실행 중이며 내부 서버 오류가 발생합니다. –

0

먼저 JavaScript 코드에 "제출"키가 있어야합니다.

$("#sendmail").click(function() { 

    var data = { 
     to: "[email protected]", 
     subject: $("#signature").val() + ": " + $("#subject").val(), 
     message: $("#body").val(), 
     signature: $('#signature').val(), 
     name: "Your name", 
     submit: true //You'll receive $_POST['submit'] in email.php 
    } 

    $.ajax({ 
     type: "POST", 
     url: "email.php", 
     data: data, 
     success: function() { 
      alert("Message sent"); 

     } 
    }); 
}); 

방금 ​​데이터 변수에 몇 줄을 추가했습니다. 잊지 마라. PHP에서 $ _POST 배열로받은 데이터가 아약스 메소드에서 보낸 것과 같다. 게시 한 코드에서 $ _POST [ 'name']이 (가) 정의되지 않았다.

<?php 
if ($_POST["submit"]) { 
    $subject = $_POST["subject"]; 
    $message = $_POST["message"]; 
    $headers = "From: " . $_POST["name"] . "Reply to: " . $_POST["signature"]; 
    //Use the receiver email you've set in your JS 
    $to = $_POST['to']; 

    mail($to, $subject, $message, $headers)) 

} 

?> 

그렇다면 다른 대답에서 말했듯이, 자신의 PC를 개발하고 웹 사이트가 서버에 배포를 완료해야합니다. 예를 들어 데비안 기반의 OS에

당신은 그것을 사용할 수 있습니다

$ sudo apt-get install apache2 mysql-server php5

이 명령은 사용자의 PC에 아파치 웹 서버, MySQL 서버 및 PHP 5를 설치합니다. 또는 다른 대답에서 말했듯이 같은 일을하는 XAMP를 사용할 수 있습니다.

웹 사이트를 실행 한 후에는 이메일을 보내도록 서버를 구성 할 수 있습니다. This post은 자신의 메일 주소를 사용하기 위해 php.ini를 구성하는 방법을 설명합니다. 원하는 경우 Gmail 이외의 다른 기능을 사용할 수 있습니다.

자신의 서버에서 메일을 받으면 코드가 맞음을 의미합니다. 을 서버에 배치하고 필요한 경우 동일한 방법으로 구성 할 수 있습니다.