Padła mi wtyczka Contact Form 7 nie chce przekazywać maili. Nie pamiętam kiedy pojawia się błąd czy po zmianie na PHP 8. Czy po nowych aktualizacjach WP.
Więc ok..
Piszę swoją wersję:
<form id="contactForm">
<label for="fromEmail">Od kogo:</label><br>
<input type="email" id="fromEmail" name="fromEmail" required><br>
<label for="subject">Temat:</label><br>
<input type="text" id="subject" name="subject" required><br>
<label for="message">Treść:</label><br>
<textarea id="message" name="message" rows="4" required></textarea><br>
<button type="button" onclick="validateForm()">Wyślij</button>
</form>
<div id="response"></div>
<script>
function validateForm() {
var fromEmail = document.getElementById("fromEmail").value;
var subject = document.getElementById("subject").value;
var message = document.getElementById("message").value;
if (fromEmail.trim() === '' || subject.trim() === '' || message.trim() === '') {
alert("Proszę wypełnić wszystkie pola.");
return;
}
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(fromEmail)) {
alert("Proszę podać poprawny adres e-mail.");
return;
}
var xhr = new XMLHttpRequest();
xhr.open("POST", "<?php echo admin_url('admin-ajax.php'); ?>", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
document.getElementById("response").innerHTML = xhr.responseText;
} else {
console.error("Wystąpił błąd podczas wysyłania żądania: " + xhr.status);
alert("Wystąpił błąd podczas wysyłania żądania. Spróbuj ponownie później.");
}
}
};
xhr.onerror = function() {
console.error("Wystąpił błąd podczas komunikacji z serwerem.");
alert("Wystąpił błąd podczas komunikacji z serwerem. Spróbuj ponownie później.");
};
xhr.send("action=send_email&fromEmail=" + encodeURIComponent(fromEmail) + "&subject=" + encodeURIComponent(subject) + "&message=" + encodeURIComponent(message));
}
</script>
w pliku functions
add_action('wp_ajax_send_email', 'send_email');
add_action('wp_ajax_nopriv_send_email', 'send_email');
function send_email() {
$to = "odpowiedzi@mail.com";
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From: " . $_POST['fromEmail'] . "\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
if (mail($to, $subject, $message, $headers)) {
echo "Wiadomość została wysłana pomyślnie.";
} else {
echo "Wystąpił problem podczas wysyłania wiadomości. Spróbuj ponownie później.";
}
wp_die();
}
Dostaję w konsoli błąd:
Unchecked runtime.lastError: The message port closed before a response was received.
I mail się nie wysyła ;/
Co robię źle?