HTML / PHP форма не отправляет электронную почту - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть форма, которая делает все правильно, кроме отправки входных значений на мою электронную почту, что я делаю не так? Ps: не использовать локальный сервер, так что это не так.

РЕДАКТИРОВАТЬ : Я не получаю никаких писем.

  • Попытка изменить if (isset ($ _ POST ['enviar'])) {part, но все еще не работает.

  • Попробовал болтливое эхо. единственное утверждение if, которое не ведет себя должным образом, - это полоски. Он останавливается на операторе else.

Фрагмент формы:

<div id="contact-wrapper">

    <?php if(isset($hasError)) { //If errors are found ?>
        <p class="error">Please check if you entered valid information.</p>
    <?php } ?>

    <?php if(isset($emailSent) && $emailSent == true) { //If email is sent ?>
        <p><strong>Email sent with success!</strong></p>
        <p>Thank you for using our contact form <strong><?php echo $name;?></strong>, we will contact you soon.</p>
    <?php } ?>

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactform">
        <div>
            <label for="name"><strong>Name:</strong></label>
            <input type="text" size="50" name="contactname" id="contactname" value="" class="required" />
        </div>

        <div>
            <label for="email"><strong>E-mail:</strong></label>
            <input type="text" size="50" name="email" id="email" value="" class="required email" />
        </div>

        <div>
            <label for="subject"><strong>Subject:</strong></label>
            <input type="text" size="50" name="subject" id="subject" value="" class="required" />
        </div>

        <div>
            <label for="message"><strong>Message:</strong></label>
            <textarea rows="5" cols="50" name="message" id="message" class="required"></textarea>
        </div>
        <input type="submit" value="enviar" name="submit" id="submit" />
    </form>
    </div>

и PHP:

<?php
//If the form is submitted
if(isset($_POST['submit'])) {

    //Check to make sure that the name field is not empty
    if(trim($_POST['contactname']) == '') {
        $hasError = true;
    } else {
        $name = trim($_POST['contactname']);
    }

    //Check to make sure that the subject field is not empty
    if(trim($_POST['subject']) == '') {
        $hasError = true;
    } else {
        $subject = trim($_POST['subject']);
    }

    //Check to make sure sure that a valid email address is submitted
    if(trim($_POST['email']) == '')  {
        $hasError = true;
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }

    //Check to make sure comments were entered
    if(trim($_POST['message']) == '') {
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['message']));
        } else {
            $comments = trim($_POST['message']);
        }
    }

    //If there is no error, send the email
    if(!isset($hasError)) {
        $emailTo = 'myemail@email.com'; //Put your own email address here
        $body = "Name: $name \n\nEmail: $email \n\nSubject: $subject \n\nComments:\n $comments";
        $headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }
}
?>

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Семейство функций ereg() устарело. используйте вместо этого preg_...() эквиваленты. Они работают практически одинаково, за исключением необходимости использовать разделители вокруг шаблонов совпадений.

Также не используйте PHP_SELF в своей форме. Это значение представляет собой необработанные данные, предоставленные пользователем, и может быть тривиально извращено для атаки XSS.

Проверка определенного поля формы, чтобы увидеть, является ли возникновение POST несколько ненадежным - вы можете изменить имя поля позже, и ваша проверка не удастся. Тем не менее, это

if ($_SERVER['REQUEST_METHOD'] == 'POST) { ... }

всегда будет работать, независимо от того, сколько или мало полей в форме, до тех пор, пока форма фактически была отправлена.

Что касается реальной проблемы, я предполагаю, что почта отправляется, или вы бы пожаловались на это. Это означает, что ваши переменные не заполняются должным образом. Вместо того, чтобы просто отправлять почту, выводите различные переменные по мере их создания, что-то вроде:

echo 'Checking name';
if ($_POST['name'] .....) {
     echo 'name is blank';
} else {
     $name = ...;
     echo "Found name=$name";
}

По сути, ваш код стал очень "болтливым" и сообщал вам, что он делает на каждом этапе.

0 голосов
/ 02 апреля 2011

@ dafz: изменить

if(isset($_POST['submit'])) {

до

if(isset($_POST['enviar'])) {

@ Марк Б также заслуживает еще одного голоса за свой ответ.

Редактировать

Вы можете попробовать следующее обновление.

if(!isset($hasError)) {
    $siteAddress = 'validaddress@yourdomain.com'; //Put admin@ or info@ your domain here
    $emailTo = 'myemail@email.com'; //Put your own email address here
    $body = "Name: $name \r\nEmail: $email \r\nSubject: $subject \r\nComments: $comments \r\n";

    $headers  = 'To: ' . $name . ' <' . $emailTo . '>' . "\r\n";
    $headers .= 'From: My Site <' . $siteAddress . '>' . "\r\n";
    $headers .= 'Reply-To: ' . $email . "\r\n";

    if (mail($emailTo, $subject, $body, $headers)) {
        $emailSent = true;
    } else {
        $emailSent = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...