ОШИБКА!Сообщение при отправке простой формы электронной почты.(PHP) - PullRequest
0 голосов
/ 05 июля 2010

Я только что купил шаблон веб-сайта на DreamTemplate.com и попытался отправить тестовое электронное письмо с него через Интернет, и вместо того, чтобы отправить электронное письмо, на нем просто появляется красный текст с надписью: «ОШИБКА!».

Я не очень знаком с PHP, но могу понять синтаксис.Код ниже: Contact.html

<script type="text/javascript">
    // <![CDATA[
    jQuery(document).ready(function () {
        $('#contactform').submit(function () {
            var action = $(this).attr('action');
            $.post(action, {
                name: $('#name').val(),
                email: $('#email').val(),
                company: $('#company').val(),
                subject: $('#subject').val(),
                message: $('#message').val()
            }, function (data) {
                $('#contactform #submit').attr('disabled', '');
                $('.response').remove();
                $('#contactform').before('<p class="response">' + data + '</p>');
                $('.response').slideDown();
                if (data == 'Message sent!') $('#contactform').slideUp();
            });
            return false;
        });
    });
    // ]]>
</script>

Contact.PHP

<?php

if(!$_POST) exit;

$email = $_POST['email'];


//$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){
    $error.="You've entered an invalid e-mail address.";
    $errors=1;
}
if($errors==1) echo $error;
else{
    $values = array ('name','email','message');
    $required = array('name','email','message');

    $your_email = "enquiries@ourdomain.com";
    $email_subject = "New Message: ".$_POST['subject'];
    $email_content = "new message:\n";

    foreach($values as $key => $value){
      if(in_array($value,$required)){
        if ($key != 'subject' && $key != 'company') {
          if( empty($_POST[$value]) ) { echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; }
        }
        $email_content .= $value.': '.$_POST[$value]."\n";
      }
    }

    if(@mail($your_email,$email_subject,$email_content)) {
        echo 'Message sent!'; 
    } else {
        echo 'ERROR!';
    }
}
?>

Может кто-нибудь помочь?Я понятия не имею, почему это не сработает.Любая помощь очень ценится.

Спасибо

Обновление: В соответствии с рекомендациями, я удалил символ @ перед "mail"Теперь отображаются полезные сообщения об ошибках:

«Внимание: mail () [function.mail]: не удалось подключиться к почтовому серверу через порт localhost» 25, проверьте настройки «SMTP» и «smtp_port» в php.ini или используйте ini_set () в E: \ web \ autoopti \ contact.php в строке 31 ОШИБКА! "

Ответы [ 4 ]

1 голос
/ 17 ноября 2011

У меня такой же код, и он отлично работает на хосте linux от hostmonster, без проблем перенес его на web.com и разочарование, которое привело меня сюда. Я бы сказал, двигаться, если с сервера на базе Windows, и у вас не будет проблемы

1 голос
/ 05 июля 2010

Публикация другого ответа на основе редактирования OP.

Вы запускаете его на локальном компьютере или на другом сервере Windows?Вам нужно иметь SMTP-сервер, работающий на машине, с которой вы пытаетесь выполнить mail ().См. Следующие статьи: Один Два для получения основных инструкций по настройке SMTP-сервера или Google содержит ответы.

Краткое объяснениечто такое SMTP-сервер и что он делает: это почтовый ретранслятор.SMTP-сервер реализует протоколы обмена сообщениями для маршрутизации электронной почты в соответствующие места назначения.

РЕДАКТИРОВАТЬ: Если вы хотите погрузиться в PHP и не хотите беспокоитьсянастраивая локальный SMTP-сервер, вы можете использовать PHPMailer , чтобы использовать своего интернет-провайдера или другой удаленный SMTP-сервер, для которого он уже настроен.Существует множество примеров кода.

Надеюсь, это поможет!

1 голос
/ 05 июля 2010

Ваш код не может отправить сообщение электронной почты. Вам необходимо отладить полученную информацию, чтобы у вас была возможность выяснить, что происходит.

Прежде всего, удалите '@' перед почтой (...). '@' Подавляет (медленно) любые ошибки, которые выдает функция mail (), что означает, что вы не получаете информацию, необходимую для ее исправления. В идеале, если эта функция получает правильно сформированные данные, у вас не будет ошибки. Наихудшее, что может произойти в этом случае, - это неправильный адрес электронной почты.

Затем я бы начал отлаживать переданные данные. Используйте функцию echo (), чтобы распечатать значения $ your_email, $ email_subject и $ email_content, чтобы убедиться, что они сформированы правильно. Функция echo () используется как:

echo($your_email);
echo($email_subject);
echo($email_content);

Вы поняли идею.

Если это не поможет или если вы уберете символ @, отправьте сообщение об ошибке. Это поможет нам помочь вам больше.

0 голосов
/ 05 июля 2010

Судя по ошибке, ваша конфигурация php.ini для сервера smtp неверна.

Вы можете проверить это, попробовав запустить простой скрипт PHP:

<?php
mail("your_email", "Test", "test message")
?>

Это устраняет любые сомнения относительно данных, которые передаются вашей почтовой функции.

Теперь, кроме этого, в вашем коде есть несколько причуд:

Глядя на ваш jQuery, я вижу, что вы получаете сообщение с помощью "val ()". Это не работает в TextArea, если я правильно помню, поэтому может возникнуть проблема, если вы используете текстовую область для получения сообщения.

Я подозреваю, что в коде PHP эта часть работает не так, как вы ожидаете:

$values = array ('name','email','message');
...
foreach($values as $key => $value){
      if(in_array($value,$required)){
        if ($key != 'subject' && $key != 'company') {
...

Ваш массив не содержит ключей, поэтому внутренне ваш массив выглядит так:

[0]=>name;
[1]=>email...

Итак, в итоге вы получите if ( 0 != 'subject' && 0 != 'company') {...

Однако этот тест на самом деле бесполезен, потому что предыдущая строка уже проверяет, что ваше значение находится в требуемом массиве, а поскольку «субъект» и «компания» не находятся в требуемом массиве, эта строка никогда не будет истинной.

В данный момент ваш contact.php не использует данные, отправленные jQuery. Я предполагаю, что это специально, потому что вы просто тестируете, верно?

Другая проблема заключается в том, что вы вообще не проверяете свои данные. Ваша форма может быть использована для рассылки спама повсюду с использованием вашей учетной записи. Это потому, что ваша функция все еще находится на стадии тестирования?

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