Máy chủ Ubuntu và PHP mới


0

Tôi vừa cài đặt phiên bản Ubuntu 14.04 Server mới trên một trong các máy tính của mình. Tôi đã cài đặt mọi thứ để làm cho nó chạy như một máy chủ web thông thường (bao gồm cả PHP). Vấn đề của tôi là, tôi có một biểu mẫu liên hệ được viết bằng PHP mà tôi đang chạy trên trang web của mình và trong đó, tôi gặp sự cố an toàn trong trường hợp có sự cố xảy ra với việc gửi biểu mẫu, đó là những gì đang xảy ra. Kịch bản chạy tốt trên bất kỳ máy chủ khác. Nhưng đối với tôi, nó chuyển đến chức năng tin nhắn của tôi thất bại mỗi khi tôi cố gắng gửi biểu mẫu. Tôi tình cờ nghĩ rằng có gì đó không đúng với cách PHP được cấu hình trên máy chủ của tôi. Có ý kiến ​​gì không?

Đây là kịch bản PHP nếu có ai muốn kiểm tra nó:

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

Biên tập

Các mặt lưu trữ của mọi thứ hoạt động tốt.


Bạn đang sử dụng MTA nào? Bạn có thể gửi thư đi khác thông qua nó?
thomasrutter

Không chắc. Làm thế nào để tôi tìm ra điều đó? Khi tôi trải qua quá trình thiết lập, tôi đã chọn không cấu hình máy chủ thư. Có phải đó là vấn đề của tôi?
Andrew Quebe

Không nhất thiết là một vấn đề vì bạn có thể sử dụng một máy chủ thư ở một nơi khác. Tôi sẽ thêm nó vào câu trả lời của tôi.
thomasrutter

Câu trả lời:


2

Bạn có thể tra cứu trạng thái thất bại của thư PHP () nghĩa là gì ở đây:

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

Trả về ĐÚNG nếu thư được chấp nhận thành công để gửi, SAI nếu không.

Giá trị trả về sai cho biết thư không được MTA của bạn chấp nhận gửi.

Trên máy chủ Linux cục bộ, nếu bạn không thực hiện thay đổi cấu hình nào khác, PHP có thể sẽ cố gắng gửi thư bằng sendmaillệnh. Lệnh này được cung cấp bởi một số MTA khác nhau, chẳng hạn như postfix hoặc chính sendmail cổ điển.

Nếu bạn có cài đặt Ubuntu tối thiểu, bạn hoàn toàn không thể cài đặt MTA. Mặt khác, bạn có thể có một cái, nhưng nó có thể không được cấu hình để có thể gửi thư đi.

Hoặc, máy tính của bạn có thể không có cổng 25 truy cập internet. Thông thường các kết nối ở cấp độ người tiêu dùng sẽ chặn các kết nối gửi đi trên cổng 25, điều này ngăn chặn hiệu quả các máy tính này gửi email đi.


Nếu bạn không muốn thiết lập một máy chủ thư đầy đủ (MTA) cục bộ trên máy chủ của mình hoặc chính sách của ISP cấm bạn làm như vậy, bạn có thể chuyển tiếp thư qua một máy chủ khác (chẳng hạn như ISP của bạn).

Để làm điều này, bạn cần cài đặt một MTA cục bộ nhưng chỉ cấu hình nó để chuyển tiếp tất cả thư đi qua một máy chủ khác thay vì cố gắng gửi trực tiếp.

Có nhiều MTA nhẹ khác nhau chỉ tồn tại để thu hẹp khoảng cách giữa chức năng gửi thư cục bộ và máy chủ SMTP từ xa, nhưng có lẽ tốt hơn là cài đặt MTA với chức năng xếp hàng thích hợp như postfix, mặc dù bạn sẽ không sử dụng hầu hết các tính năng của postfix.

Nếu bạn cài đặt postfix thì việc này tương đối dễ dàng vì Ubuntu cung cấp cho bạn một menu khi cài đặt (nếu bạn bỏ lỡ menu, bạn có thể sử dụng sudo dpkg-reconfigure postfixđể làm lại sau, mặc dù điều đó sẽ hỏi bạn nhiều câu hỏi hơn). Bạn có thể muốn những gì Ubuntu gọi là "máy chủ vệ tinh" và bạn muốn là đích cuối cùng không có thư (ví dụ: không có gì trong "mydestination" hoặc "Relay_domains" trong cấu hình của postfix và sử dụng "Relayhost" để tham khảo máy chủ SMTP bên ngoài) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.