Не отправляется форма с локального сервера
Всем привет! Я начинающий в разработке сайтов. Взял свой первый заказ, все сделал, но... Столкнулся с тем, что не могу настроить отправку формы. Перепробовал разные варианты - и ни в какую. Локальный сервер: XAMPP. Настройки сервера:
**файл php.ini**
SMTP=smtp.gmail.com
smtp_port=587
sendmail_from = [email protected]
**файл sendmail.ini**
smtp_server=smtp.gmail.com
smtp_port=587
smtp_ssl=auto
[email protected]
auth_password=пароль приложения
Дальше код.
ВЕРСТКА
<form id="form" class="subscribe__form form-send">
<h5 class="subscribe__title"><?php echo carbon_get_post_meta($page_id, 'subscribe_title')?></h5>
<div id="note"></div>
<div class="subscribe__form-body form-body" id="fields">
<input required type="text" name="name" placeholder="<?php echo carbon_get_post_meta($page_id, 'subscribe_placeholder-1')?>" class="form-body_input _req">
<input required type="text" name="email" placeholder="<?php echo carbon_get_post_meta($page_id, 'subscribe_placeholder-2')?>" class="form-body_input _req _email">
<button type="submit" id="submit" class="form-body_button red-button"><?php echo carbon_get_post_meta($page_id, 'subscribe_button_text')?></button>
</div>
</form>
JS
;(function() {
let forms = document.querySelectorAll('.form-send');
if (forms.length === 0) {
return;
}
let serialize = function(form) {
let items = form.querySelectorAll('input');
let str = '';
for (let i = 0; i < items.length; i += 1) {
let item = items[i];
let name = item.name;
let value = item.value;
let separator = i === 0 ? '' : '&';
if (value) {
str += separator + name + '=' + value;
}
}
return str;
}
let formSend = function(form) {
let data = serialize(form);
let xhr = new XMLHttpRequest();
let url = 'wp-content/themes/wpvitaliy/mail.php';
xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
let activePopup = document.querySelector('.popup.open');
if (activePopup) {
activePopup.classList.remove('open');
} else {
// console.log('error');
}
if (xhr.response === 'success') {
document.querySelector('.popup-thnx').classList.add('open');
} else {
console.log('error');
}
};
xhr.send(data);
};
for (let i = 0; i < forms.length; i += 1) {
forms[i].addEventListener('submit', function(e) {
e.preventDefault();
let form = e.currentTarget;
formSend(form);
});
}
})();
PHP
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'POST') {
exit();
}
$admin_email = '[email protected]';
$form_subject = 'Заявка с сайта на консультацию';
$message = '';
$color_counter = 1;
foreach ($_POST as $key => $value) {
if ($value === '') {
continue;
}
$color = $color_counter % 2 === 0 ? '#fff' : '#f8f8f8';
$message .= "
<tr style='background-color: $color;'>
<td style='padding: 10px; border: 1px solid #e9e9e9;'>$key</td>
<td style='padding: 10px; border: 1px solid #e9e9e9;'>$value</td>
</tr>";
$color_counter++;
}
function adopt($text) {
return '=?utf-8?B?'.base64_encode($text).'?=';
}
$message = "<table style='width: 100%;'>$message</table>";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "From:" . adopt($form_subject) . " <$admin_email>\r\n";
$success_send = mail($admin_email, adopt($form_subject), $message, $headers);
if ($success_send) {
echo 'success';
} else {
echo 'error';
}
Консоль не выдает пояснение ошибки, поэтому ограничился console.log('error') :(((
Большая надежда, что кто-то поможет разобраться, т.к. сам перебрал кучу вариантов и пересмотрел массу уроков, но свой вопрос не решил(
Ответы (1 шт):
Автор решения: wnsy
→ Ссылка
Вопрос решен! Моя задача была протестить отправку формы. Я поставил локальный сервер hMailServer, создал на нем почтовый аккаунт и настроил отправку на него. Все сработало!