Update Two : после некоторого тестирования я обнаружил, что он не работает, когда jQuery загружается на страницу. Моя страница основана на jQuery, так что мне делать?
Обновление : здесь вы можете увидеть проблемную страницу и рабочую тестовую страницу здесь .
Я делаю контактную форму, и это выглядит так
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="../sendemail.php"> <div class="row-fluid"> <div class="span5"> <label>First Name</label> <input name="first" type="text" class="input-block-level" required="required" placeholder="Your First Name"> <label>Last Name</label> <input name="last" type="text" class="input-block-level" required="required" placeholder="Your Last Name"> <label>Email Address</label> <input name="email" type="text" class="input-block-level" required="required" placeholder="Your email address"> </div> <div class="span7"> <label>Message</label> <textarea name="message" id="message" required class="input-block-level" rows="8"></textarea> </div> </div> <button type="submit" class="btn btn-primary btn-large pull-right">Send Message</button> <p> </p> </form>
Ничего особенного. sendemail.php выглядит так
<?php header('Content-type: application/json'); $status = array( 'type'=>'success', 'message'=>'Email sent!' ); $name = @trim(stripslashes($_POST['first']." ".$_POST['last'])); $email = @trim(stripslashes($_POST['email'])); $subject = "Monarc - Message From ".$name; $message = @trim(stripslashes($_POST['message'])); $email_from = $email; $email_to = 'xxx@xxx.xxx'; $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message; $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>'); echo json_encode($status); die;
Письмо приходит, но почта не появляется в письме. Он говорит (неизвестный отправитель) как отправитель, и тело выглядит так:
Имя:
Эл. адрес:
Тема: Monarc – Сообщение от
Сообщение:
Что я делаю не так?
Благодаря!
Чтобы опубликовать значение формы, вы должны использовать ввод типа submit вместо типа кнопки
изменение:
<button type="submit" class="btn btn-primary btn-large pull-right">Send Message</button>
чтобы:
<input type="submit" class="btn btn-primary btn-large pull-right" value="Send Message">
Дополнительная информация, эта форма использует следующий файл javascript:
jQuery (function ($) {
// Ajax contact var form = $ ('. Contact-form'); form.submit (function () {$ this = $ (this); $ .post ($ (this) .attr ('action'), function (data) {$ this.prev (). text (data.message) .fadeIn (). delay (3000) .fadeOut ();}, 'json'); return false;});
// Goto Top $ ('. Gototop'). Click (function (event) {
event.preventDefault (); $ ('html, body'). animate ({scrollTop: $ ("body"). offset (). top}, 500); }); // End goto top});
Поиск на другом форуме я нашел, как исправить это. Вам нужно всего лишь добавить следующий код в файл php:
$headers = "From: mail <$email_from>\r\n"; $headers .= "MIME-Version: 1.0" ."\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
и удалите «@» из $ success = @mail ($ email_to, $ subject, $ body, 'From: <'. $ email_from. '>');
В файле «main.js» ваш код не предоставляет никаких данных в методе .post (). вам нужно добавить $ (this) .serialize (), чтобы получить все поля / значения формы.
непроверенный, но должен работать –
$ .post ($ (this) .attr ('action'), $ (this) .serialize (), function (data) {
Надеюсь, что это поможет решить проблему