Я видел, что в StackOverflow есть много похожих на мои вопросы, но я думаю, что пока не смог найти правильное решение моего вопроса.
Проблема, связанная с тем, что у меня есть, связана с получением функциональности электронной почты – в основном, свяжитесь с нами на веб-сайте, где пользователь может заполнить форму на основе html
и нажать send message
и это сообщение будет доставлено на мой адрес электронной почты.
Я делаю свое развитие с помощью XAMPP и запуска сервера Apache и Mercury на localhost. Несмотря на то, что валидация показывает успех, электронные письма не проходят.
method="post"
в раздел HTML, но выяснил, что type: "POST"
уже включен. php.ini
оба установлены в 25
. Я внимательно прочитал этот очень подробный пост . Идея загрузить веб-сайт в живую хостинг пришла с этой должности.
<?php $name = trim($_POST['name']); $email = trim($_POST['email']); $message = trim($_POST['message']); if( isset($name) && isset($email) ) { // Avoid Email Injection and Mail Form Script Hijacking $pattern = "/(content-type|bcc:|cc:|to:)/i"; if( preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message) ) { exit; } $to = "myemail@gmail.com"; $sub = "$name from Cv"; // HTML Elements for Email Body $body = <<<EOD <strong>Name:</strong> $name <br> <strong>Email:</strong> <a href="mailto:$email?subject=feedback" "email me">$email</a> <br> <br> <strong>Message:</strong> $message <br> EOD; $headers = "From: $name <$email>\r\n"; $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; mail($to, $sub, $body, $headers); } ?>
$("#contact-form-1").submit(function(e) { e.preventDefault(); var success = $(this).find('.email-success'), failed = $(this).find('.email-failed'), loader = $(this).find('.email-loading'), postUrl = $(this).attr('action'); success.fadeOut(100); failed.fadeOut(100); loader.fadeOut(100); var data = { name: $(this).find('.contact-name').val(), email: $(this).find('.contact-email').val(), message: $(this).find('.contact-message').val() }; if ( isValidEmail(data['email']) && (data['message'].length > 1) && (data['name'].length > 1) ) { $.ajax({ type: "POST", url: postUrl, data: data, beforeSend: function() { loader.fadeIn(500); }, success: function(data) { loader.fadeOut(500); failed.fadeOut(500); success.delay(500).fadeIn(500); }, error: function(xhr) { // if error occured loader.fadeOut(500); success.fadeOut(500); failed.delay(500).fadeIn(500); }, complete: function() { loader.fadeOut(500); } }); } else { loader.fadeOut(500); failed.delay(500).fadeIn(500); success.fadeOut(500); } return false; });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form id="contact-form-1" action="sendmail.php" method="POST"> <input class="contact-name form-control" type="text" name="name" placeholder="FULL NAME"> <input class="contact-email form-control" type="text" name="email" placeholder="EMAIL"> <textarea class="contact-message form-control" name="message" placeholder="MESSAGE" rows="5"></textarea> <button class="btn">SEND MESSAGE</button> </form>
ПРИМЕЧАНИЕ. Я не написал этот код самостоятельно, поскольку он был предоставлен создателем шаблона. Я связался с создателем шаблона и столкнулся с абсолютно ужасной поддержкой. Это главная причина моего сообщения здесь.
В то время как я смотрел делать больше исследований и спрашивать, я нашел этот чрезвычайно полезный ответ, который окончательно определил мою локальную конфигурацию XAMPP. Таким образом, в самом коде не было ничего плохого, но моя конфигурация была проблемой.
ВАЖНО: попробуйте выполнить шаги как можно ближе, просто ;
недостающие могут сделать большую разницу в конечном результате. Поэтому дважды проверяйте каждый шаг, если что-то кажется сломанным.
Также нашел еще один очень проницательный и интересный для чтения пост .