Hi,
meine PHP-Script wird von einer anderen Domain aus aufgerufen, deshalb CORS. Soweit so gut, die Daten werden per POST verarbeitet und alles fehlerfrei. Sobald ich aber PHPMailer nutzen möchte, um die Daten per Mail zu senden, wirft mir das Script folgenden Fehler:
Mein Script:
My AJAX-Call
Ich denke dass es an PHPMailer liegt, da wenn ich PHPMailerAutoload.php nicht einbinde und die Daten einfach so verarbeite (z.B. in eine Datei schreibe) dann klappt alles. Sobald ich require 'libs/PHPMailer/PHPMailerAutoload.php'; oder '$mail = new PHPMailer;' sage, kommt der Fehler: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Ich hoffe ihr könnt mir helfen
Vg leinaD
meine PHP-Script wird von einer anderen Domain aus aufgerufen, deshalb CORS. Soweit so gut, die Daten werden per POST verarbeitet und alles fehlerfrei. Sobald ich aber PHPMailer nutzen möchte, um die Daten per Mail zu senden, wirft mir das Script folgenden Fehler:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
PHP-Code:
<?php
if (!isset($_SERVER['HTTP_ORIGIN'])) {
// This is not cross-domain request
echo json_encode(array('status' => '[0] Ein Fehler ist aufgetreten.'));
exit;
}
$wildcard = FALSE; // Set $wildcard to TRUE if you do not plan to check or limit the domains
$credentials = TRUE; // Set $credentials to TRUE if expects credential requests (Cookies, Authentication, SSL certificates)
$allowedOrigins = array('https://my-first-domain');
if (!in_array($_SERVER['HTTP_ORIGIN'], $allowedOrigins) && !$wildcard) {
// Origin is not allowed
header("Content-Type: application/json; charset=utf-8");
echo json_encode(array('status' => '[1] Ein Fehler ist aufgetreten.'));
exit;
}
$origin = $wildcard && !$credentials ? '*' : $_SERVER['HTTP_ORIGIN'];
header("Access-Control-Allow-Origin: " . $origin);
if ($credentials) {
header("Access-Control-Allow-Credentials: true");
}
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: Origin");
header('P3P: CP="CAO PSA OUR"'); // Makes IE to support cookies
// Handling the Preflight
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header("Content-Type: application/json; charset=utf-8");
echo json_encode(array('status' => '[2] Ein Fehler ist aufgetreten.'));
exit;
}
if(isset($_POST['ContactEmail'])) {
// The FILTER_SANITIZE_STRING filter removes tags and remove or encode special characters from a string.
$name = filter_var($_POST['ContactName'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['ContactEmail'], FILTER_SANITIZE_STRING);
require 'libs/PHPMailer/PHPMailerAutoload.php';
.......
if($mail->send()) {
$response = "Erfolgreich übermittelt.";
} else {
$response = "Deine E-Mail konnte leider nicht gesendet werden.";
}
header("Content-Type: application/json; charset=utf-8");
echo json_encode(array('status' => $response));
} else {
header("Content-Type: application/json; charset=utf-8");
echo json_encode(array('status' => '[3] Ein Fehler ist aufgetreten.'));
exit;
}
?>
Code:
$.ajax({ xhrFields: { withCredentials: true }, type: "POST", data: formData, contentType: false, cache: false, processData: false, url: "http://my-second-domain/my-script.php" }).done(function(data) { console.log("done"); }) .fail(function(data) { console.log("Error"); });
Ich hoffe ihr könnt mir helfen
Vg leinaD
Kommentar