Новый сервер Ubuntu и PHP

Я просто установил новую версию Сервера Ubuntu 14.04 на одном из моих компьютеров. Я установил все, чтобы заставить его работать как типичный веб-сервер (включая PHP). Моя проблема, у меня есть форма контакта, записанная в PHP, что я работаю на своем сайте и в нем, у меня есть сбой, безопасный в случае, если что-то идет не так, как надо с представлением формы, которая является тем, что происходит. Сценарий хорошо работает на любом другом сервере. Но на моем, это переходит к моему сообщению отказавшая функция каждый раз, когда я пытаюсь отправить форму. Я, оказывается, думаю, что это - что-то не так со способом, которым PHP настроен на моем сервере. Какие-либо идеи?

Вот Сценарий PHP, если кто-либо хочет протестировать его:

<?php
$field_name = trim($_POST['cf_name']);
$field_email = trim($_POST['cf_email']);
$field_subject = trim($_POST['cf_subject']);
$field_message = trim($_POST['cf_message']);

if (empty($field_name) && empty($field_email) && empty($field_subject) && empty($field_message) && !preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $field_email))
{
    ?>
    <script language="javascript" type="text/javascript">
        alert('One or more fields are invalid. Please fill out any empty fields and make sure your email address is valid.');
        window.location = 'contact.html';
    </script>
    <?php 
}

else if(empty($field_name))
{ 
    ?>
    <script language="javascript" type="text/javascript">
        alert('Please type in your name.');
        window.location = 'contact.html';
    </script>
    <?php
}

else if(empty($field_email))
{ 
    ?>
    <script language="javascript" type="text/javascript">
        alert('Please type an email address.');
        window.location = 'contact.html';
    </script>
    <?php
}

else if(empty($field_subject))
{
    ?>
    <script language="javascript" type="text/javascript">
        alert('Please type a subject.');
        window.location = 'contact.html';
    </script>
    <?php
}

else if(empty($field_message))
{ 
    ?>
    <script language="javascript" type="text/javascript">
        alert('Please type a message.');
        window.location = 'contact.html';
    </script>
    <?php
}

else if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $field_email))
{
    ?>
    <script language="javascript" type="text/javascript">
        alert('Please enter a valid email address.');
        window.location = 'contact.html';
    </script>
    <?php 
}

else
{
    $mail_to = 'youremail@yourdomain.com';

    $subject = "New message from...";

    $body_message .= 'A message from a user of...'."\n\n";
    $body_message .= 'From: '.$field_name."\n";
    $body_message .= 'E-mail: '.$field_email."\n";
    $body_message .= 'Subject: '.$field_subject."\n";
    $body_message .= 'Message: '.$field_message;

    $headers = "From:";

    $mail_status = mail($mail_to, $subject, $body_message, $headers);

    if ($mail_status) { 
        ?>
        <script language="javascript" type="text/javascript">
            alert('Thanks for contacting me! I will respond as soon as possible.');
            window.location = 'contact.html';
        </script>
        <?php 
    } else { 
        ?>
        <!-- This is triggering every time I submit the form -->
        <script language="javascript" type="text/javascript">
            alert('Message failed. Please try again later.');
            window.location = 'contact.html';
        </script>
        <?php 
    }
} 
?>

Править

Сторона хостинга вещей хорошо работает.

0
задан 18 July 2014 в 03:45

1 ответ

Можно искать то, что неудавшееся состояние почты PHP () означает здесь:

http://php.net/manual/en/function.mail.php

Возвращает TRUE, если почта была успешно принята для доставки, ЛОЖЬ иначе.

ложное возвращаемое значение указывает, что почта не была принята для доставки Вашим MTA.

На локальном сервере Linux, если Вы не сделали никаких других изменений конфигурации, PHP будет, вероятно, пытаться отправить почту с помощью эти sendmail команда. Эта команда обеспечивается многими различными MTAs, такими как постфикс или сам классический sendmail.

, Если у Вас есть минимальная установка Ubuntu, Вам нельзя было установить MTA вообще. Иначе Вы можете иметь один, но это не может быть настроено, чтобы быть в состоянии отправить исходящую почту.

Или, Ваш компьютер не может иметь порта 25 доступов к Интернету. Это характерно для соединений потребительского уровня с блоком, исходящим connecitons на порте 25, который эффективно останавливает эти компьютеры, посылающие исходящее электронное письмо.

<час>

, Если Вы не хотите настраивать полный почтовый сервер (MTA) локально на Вашем сервере или политике Вашего ISP, мешает Вам делать так, можно передать почту через другой сервер (такой как ISP).

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

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

при установке постфикса относительно легко сделать это, потому что Ubuntu дает Вам меню при установке (при пропавших без вести меню можно использовать sudo dpkg-reconfigure postfix, чтобы сделать это снова позже, хотя это спросит Вас еще больше вопросов). Вы, вероятно, хотите то, что Ubuntu называет "спутниковым хостом", и Вы хотите быть конечным местом назначения ни для какой почты (например, ничто под "mydestination" или "relay_domains" в конфигурации постфикса, и использовать "relayhost" для обращения к внешнему серверу SMTP).

2
ответ дан 18 July 2014 в 03:45

Другие вопросы по тегам:

Похожие вопросы: