Novo servidor Ubuntu e PHP

0

Acabei de instalar uma nova versão do Ubuntu 14.04 Server em um dos meus computadores. Eu instalei tudo para fazê-lo funcionar como um servidor web típico (incluindo PHP). Meu problema é, eu tenho um formulário de contato escrito em PHP que estou executando no meu site e nele, eu tenho uma falha segura no caso de algo der errado com o envio do formulário, que é o que está acontecendo. O script é executado corretamente em qualquer outro servidor. Mas no meu, vai para a minha mensagem com falha toda vez que tento enviar o formulário. Eu acho que é algo errado com o modo como o PHP é configurado no meu servidor. Alguma idéia?

Aqui está o script PHP, se alguém quiser testá-lo:

<?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 = '[email protected]';

    $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 
    }
} 
?>

Editar

O lado da hospedagem funciona bem.

    
por Andrew Quebe 18.07.2014 / 01:45

1 resposta

2

Você pode procurar o que um status com falha do PHP mail () significa aqui:

link

% bl0ck_qu0te%

O falso valor de retorno indica que o e-mail não foi aceito para entrega pelo seu MTA.

Em um servidor Linux local, se você não tiver feito outras alterações de configuração, o PHP provavelmente estará tentando enviar e-mails usando o comando sendmail . Este comando é fornecido por vários MTAs diferentes, como o postfix, ou o próprio sendmail clássico.

Se você tiver uma instalação mínima do Ubuntu, talvez não tenha um MTA instalado. Caso contrário, você pode ter um, mas pode não estar configurado para poder enviar e-mails de saída.

Ou o seu computador pode não ter acesso à porta 25 para a Internet. É comum que as conexões no nível do consumidor bloqueiem as conexões de saída na porta 25, o que efetivamente impede que esses computadores enviem e-mails de saída.

Se você não quiser configurar um servidor de e-mail completo (MTA) localmente em seu servidor ou se a política do ISP o proibir, será possível retransmitir o e-mail por outro servidor (como o seu ISP).

Para fazer isso, você precisa instalar um MTA local, mas configurá-lo apenas para retransmitir todos os emails de saída através de outro servidor, em vez de tentar entregá-lo diretamente.

Existem vários MTAs leves que existem apenas para preencher a lacuna entre uma função sendmail local e um servidor SMTP remoto, mas provavelmente é melhor instalar um MTA com funcionalidade de enfileiramento adequada como postfix, mesmo que você não esteja usando a maioria dos características do postfix.

Se você instalar o postfix é relativamente fácil fazer isso porque o Ubuntu lhe oferece um menu ao instalar (se você perdeu o menu, você pode usar sudo dpkg-reconfigure postfix para fazê-lo novamente mais tarde, embora isso faça ainda mais perguntas) . Você provavelmente quer o que o Ubuntu chama de "host de satélite", e você quer ser o destino final para nenhum email (por exemplo, nada em "mydestination" ou "relay_domains" na configuração do postfix e usar "relayhost" para se referir ao servidor SMTP externo) .

    
por thomasrutter 18.07.2014 / 02:34