Контактная форма jquery и получение электронного письма с текстом сообщения

Я создал контактную форму на основе этот учебник, но я не могу заставить его работать. Когда я нажимаю кнопку отправки, ничего не происходит (кажется, что страница обновляется или на моем активном веб-сайте она возвращается к index.html), и я не получаю ни письма, ни ответа. Я хочу получить электронное письмо, содержащее содержимое формы, которую заполнил пользователь.

Это ajaxSubmit.php:

<?php

$name = $_POST['name']; // contain name of person
$email = $_POST['email']; // Email address of sender 
$web = $_POST['web']; // Your website URL
$body = $_POST['text']; // Your message 
$receiver = "[email protected]" ; // hardcorde your email address here - This is the email address that all your feedbacks will be sent to 
if (!empty($name) & !empty($email) && !empty($body)) {
$body = "Name:{$name}\n\nWebsite :{$web}\n\nComments:{$body}";
$send = mail($receiver, 'Contact Form Submission', $body, "From: {$email}");
if ($send) {
    echo 'true'; //if everything is ok,always return true , else ajax submission won't work
}

}

?>

[email protected] — это, конечно, просто заполнитель для моего обычного адреса электронной почты.

FIDDLE с html, js и css.

Что я делаю не так?


person sqe    schedule 08.04.2013    source источник
comment
Что значит не могу заставить это работать? Что конкретно не работает? Какие ошибки вы получаете?   -  person j08691    schedule 08.04.2013
comment
Когда я нажимаю кнопку отправки, ничего не происходит (кажется, что страница обновляется), я не получаю ни письма, ни ответа.   -  person sqe    schedule 08.04.2013


Ответы (1)


Я рекомендую использовать isset, чтобы проверить, действительно ли существуют опубликованные переменные, более того: я рекомендую использовать тернарный оператор, чтобы проверить, действительно ли они установлены:

$name = isset($_POST['name']) ? $_POST['name'] : false;
$email = isset($_POST['email']) ? $_POST['email'] : false;
$web = isset($_POST['web']) ? $_POST['web'] : false;
$text = isset($_POST['text']) ? $_POST['text'] : false;

$receiver = "[email protected]"; // You forgot to close a whitespace here.

if(($name && $email && $web && $text) != false)
{
    // It's okay to send email now.
    // Checkpoint.
}

Я рекомендую использовать эту функцию фильтрации спама:

function spamcheck($field)
{
    //address using FILTER_SANITIZE_EMAIL
    $field=filter_var($field, FILTER_SANITIZE_EMAIL);

    //address using FILTER_VALIDATE_EMAIL
    if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
        return true;
    }
    else
    {
        return false;
    }
}

И мне нравится использовать эту модифицированную почтовую функцию:

// Usage:   sendMail($toEmail, $fromEmail, $subject, $message);
// Pre:     $toEmail is of type string and is a valid email address, 
//          indicating the receiver.
//          $fromEmail is of type string and is a valid email address, 
//          indicating the sender.
//          $subject is of type string, indicating the email subject.
//          $message is of type string, indicating the message to be send
//          via the email, from $fromEmail's address to $toEmail's address.
// Post:    An email containing $message and the subject $subject from 
//          $fromEmail's address to $toEmail's address if $fromEmail
//          does not indicate a spam email.
function sendMail($toEmail, $fromEmail, $subject, $message)
{
    $validFromEmail = spamcheck($fromEmail);
    if($validFromEmail)
    {
        mail($toEmail, $subject, $message, "From: $fromEmail");
    }
}

Так что вы можете продолжить с того места, где мы взлетели. Начнем с того, что вам не нужны фигурные скобки. Кроме того... вы перезаписываете переменную $body, было бы разумнее хранить переменные отдельно. Я также рекомендую хранить тему в переменной.

$subject = 'Contact Form Submission'; // Place where we left of at Checkpoint.
$message = "Name: $name\n\nWebsite :$web\n\nComments:$body"; // Place where we left of at Checkpoint.
sendMail($email, $receiver, $subject, $message); // Place where we left of at Checkpoint.

Вы также должны убедиться, что у вас есть доступ к SMTP (Simple Mail Transport Protocol), поэтому вам может быть недостаточно работать с локальным хостом, если у вас нет SMTP-сервера для использования. ЕСЛИ он у вас есть, и он не работает, вам, возможно, придется настроить параметры php ini:

ini_set('SMTP' , 'smtp.yourwebsite.com');
ini_set('smtp_port' , '25');
ini_set('username' , '[email protected]');
ini_set('password' , 'pass');
ini_set('sendmail_from' , '[email protected]');

Примечание. Было бы разумно сделать модифицированную почтовую функцию ВОЗВРАТОЙ почтовой функции, чтобы вы могли проверить, было ли это успешно или нет.

person Jonast92    schedule 08.04.2013
comment
Хорошо, я не знаю, правильно ли я понял, так как я никогда раньше не работал с php. Мой ajaxSbmit.php теперь выглядит как это, а js выглядит как это. До сих пор нет ответа, что меня не удивляет, потому что я почти уверен, что что-то не понял. - person sqe; 08.04.2013