2016-10-30 5 views
0

私はウェブサイトのためのお問い合わせフォームを作成しています。私はjQueryを使ってhtmlボタン用の.click()関数を作成しています。 ajaxを使用してemail.phpコードを呼び出します。ボタンをクリックすると、コンソールに次のエラーが表示されます。外部PHP電子メールのリクエスト500内部サーバエラーで応答する

500(内部サーバーエラー)

私はajaxと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には決して入力しないでください。 メール機能でメールに見えるものを入れてみてください。 最後に、SMTPサーバーを持っているか、電子メールを送信できるように* sendmail *を設定しましたか? 正確にはあなたのエラーは何ですか? PHPがエラーを表示し、php.iniを表示するように更新してください。 – AnthonyB

+0

これが問題なのかどうかわかりませんが、ECOWEBHOSTはローカルサーバではありません。また、データオブジェクトにサブミットキーを追加するにはどうすればよいですか? –

+0

あなたのメールを送信するためにsmtpとして何を使用していますか?あなたのメールは誰から来るのですか? – Dom

答えて

0

エラー500の問題は具体的ではありません。それは単に「何かが間違っている」という意味です。エラー500だけで何かを診断することは不可能です。

エラー500の原因は、PHPエラーログのどこにあるのか分かっていれば分かります。

私があなたに尋ねる最初の質問は、PHPを実行している環境は何ですか?それはあなたのコンピュータ上にあるのですか、それともインターネットサービスプロバイダのウェブサーバー上にありますか?あなたのPCで開発環境を動かさない場合は、XAMPPのような簡単なものをインストールして開発することを強くお勧めします。高度な開発者にとっては理想的ではありませんが、PHPの周りを学ぶためには良いことです。少なくともではない、それはあなたが実際にアクセスして読み取ることができ、適切なエラーログを書き込むため:)

他の事は、メール機能についてのいくつかの便利な情報を提供するPHPのドキュメントを見ることである。

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

ご覧のように、mail()はsendmailコマンドにアクセスできるシステム上で実行されることを前提としています。いずれかのPHPを実行しているシステムがsendmailを持っていない場合、またはsendmailがない場合は、これが問題になる可能性があります。しかし、エラーログを見ることなく、私は推測しています。

私の助言は、まず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配列で受け取ったデータは、あなたのajaxメソッドで送信したものと同じです 投稿したコードでは、$ _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を所有し、あなたのウェブサイトが完了した場合にのみ、サーバーにそれを展開に開発してみてください。あなたはそれを使用することができ、インスタンス用DebianベースのOS上で

$ sudo apt-get install apache2 mysql-server php5

このコマンドは、お使いのPC上でApacheウェブサーバ、MySQLサーバー、およびPHP 5をインストールします。または、他の答えで述べたように、同じことをするXAMPを使うことができます。

ウェブサイトを実行したら、メールを送信するようにサーバーを設定できます。 This postは、独自のメールアドレスを使用するためにphp.iniを設定する方法を説明しています。もちろん、Gmail以外の使い方もできます。

自分のサーバーからメールを受信した場合、コードが正しいことを意味します。 をサーバーに展開し、必要に応じて同じ方法で構成できます。

関連する問題