Ich arbeite an der Erstellung eines Kontaktformulars für eine Website. Ich benutze jquery, um eine .click() - Funktion für eine HTML-Schaltfläche zu erstellen. dann mit ajax den email.php code aufrufen. Wenn ich auf die Schaltfläche klicke, zeigt die Konsole den folgenden Fehler an:Externe PHP E-Mail-Anfrage mit 500 internen Server Fehler
500 (Interner Serverfehler).
Ich bin neu zu Ajax und PHP zusammen verwendet werden, so habe ich keine Ahnung, was zu diesem Zeitpunkt zu tun ist. Hier
ist das HTML-Formular:
<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>
und hier ist die jQuery/AJAX Aufruf der PHP-Code:
$ (function() {
$("#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);
});
});
Und schließlich ist hier der PHP-Code, der für das Senden über die E-Mail verantwortlich ist:
<?php
if ($_POST["submit"]) {
$subject = $_POST["subject"];
$message = $_POST["message"];
$headers = "From: " . $_POST["name"] . "Reply to: " . $_POST["signature"];
mail("myemail", $subject, $message, $headers))
}
?>
Jede Hilfe wäre sehr geschätzt.
Es ist wahrscheinlich nicht der Fehler, aber in Ihrem * data * JS-Objekt haben Sie keinen "submit" -Schlüssel, so dass Sie niemals in Ihre Email in der email.php eintreten werden. Dann versuchen Sie, etwas, das auf eine E-Mail in Mail-Funktion aussieht. Schließlich haben Sie einen SMTP-Server oder haben Sie * sendmail * konfiguriert, um E-Mails senden zu können? Was ist genau dein Fehler? PHP sollte einen Fehler anzeigen, versuchen Sie, Ihre php.ini zu aktualisieren, um sie anzuzeigen – AnthonyB
Ich weiß nicht, ob das wichtig ist, aber ich verwende ECOWEBHOST nicht einen lokalen Server. Wie kann ich den Übergabeschlüssel zu meinem Datenobjekt hinzufügen? –
Was verwenden Sie als SMTP, um Ihre E-Mails zu senden? Von wem kommen deine E-Mails? – Dom