2017-07-02 156 views
-1

我最近一直在通過創建網頁並將它們發佈到託管在我的覆盆子pi上的apache2服務器上,並使用no-ip.com地址發佈它們,最近一直在學習HTML,js,CSS和PHP。我的第一個學習PHP的真正項目是創建一個簡單的表單,然後發送一封郵件給我,但我一直在討論mail()函數的執行問題,沒有任何錯誤,但實際上並沒有發送電子郵件。不接收來自PHP郵件()函數的電子郵件

下面的形式:

<form class="" action="/FormTesting/sendMail.php" method="post"> 
    Name:<br><input type="text" name="name" value="" required><br> 
    Email:<br><input type="text" name="email" value="" required><br> 
    Message:<br><textarea name="message" rows="8" cols="80" required></textarea><br> 
    Subject: 
    <input type="radio" name="subject" value="Hello!">Hello! 
    <input type="radio" name="subject" value="Whats up">Whats Up!<br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

下面是在窗體的「行動」屬性的PHP文件引用:

<?php 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
    $to = "[email protected]"; 
    $name = $_POST["name"]; 
    $email = $_POST["email"]; 
    $message = $_POST["message"]; 
    $subject = $_POST["subject"]; 

    echo $name; 
    echo $email; 
    echo $message; 
    echo $subject; 

    $headers = array("From: " . $email, 
"Reply-To: " . $to, 
"X-Mailer: PHP/" . PHP_VERSION); 

    mail($to, $subject, $message, $header); 

} else { 
    echo $_SERVER["REQUEST_METHOD"]; 
} 
?> 

據我所知,這個問題已經被問過,我有嘗試了其他答案中列出的大多數方法,但我仍然無法使PHP mail()函數正常工作。我得到的最好的信息是,我必須在服務器上進行某種安裝或格式化,以便發送電子郵件,但我還沒有找到有據可查的文件和/或解釋。 (即PHPMailer的 - 但仍...如何?)

編輯:

我檢查了郵件功能的返回值。 。 。

if(mail("[email protected]", "subject", "message", $headers)) { 
    echo "TRUE"; 
    }else { 
    echo "FALSE"; 
    } 

。 。 。事實證明它正在返回假。我認爲這意味着它是我的代碼中的錯誤,然後呢?

編輯:

顯然,我並不清楚,當我說我發佈這個問題之前做了研究。我嘗試了所有的答案,作爲我作爲一個「重複」關閉的問題的答案,因此我問,無論如何這個問題。

+0

您不檢查mail()函數的返回值。這是最不應該的。 PHP手冊中的每個函數都具有記錄的返回值,瞭解返回值並處理它以執行最少的操作 - http://php.net/mail - 編輯您的問題並解釋您期望的返回值以及返回值你得到的價值。如果郵件的回覆是真實的,而你沒有收到郵件,這就超出了PHP的範圍。 – hakre

+0

我檢查了返回值。這是錯誤的,我不知道該怎麼做。 –

+0

這只是意味着發送電子郵件失敗(直接)。讓你的應用程序處理它,這是一個有效的返回值(它可能發生)。其餘的是解決問題,但首先讓你的代碼與錯誤案例一起工作。例如。向用戶顯示發送電子郵件失敗的消息。 – hakre

回答

-2

我試了同樣的腳本,並得到了電子郵件。但是,它進入了垃圾郵件文件夾。標題應該有更多的細節。您可以檢查郵件函數返回碼以確保函數成功。以下是最佳做法。

  $boundary = "==MP_Bound_xyccr948x=="; 
     $headers = "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n"; 
     $headers .= "From: OrganizationName <[email protected]>\r\n"; 
     $headers .= "Return-path: [email protected]\r\n"; 


     $message = "This is a Multipart Message in MIME format\n"; 
     $message .= "--$boundary\n"; 
     $message .= "Content-Type: text/plain; charset=\"utf-8\"\n"; 
     $message .= "Content-Transfer-Encoding: 7bit\n\n"; 
     $message .= $user_entered_message . "\n"; 
     $message .= "--$boundary--"; 
     $mailsent = mail($to, $subject, $message, $headers, "[email protected]"); 

     if ($mailsent) 
     { 
     confirmation_msg(); 
     } 
     else 
     { 
     email_error_msg(); 
     } 
+0

我多次檢查了我的垃圾郵件文件夾,它從未出現過。在將額外的細節添加到標題之前和之後,它是否起作用?還是隻是將它從垃圾郵件轉移到常規的收件箱?還有什麼是郵件()函數中的最後一個參數後,我從來沒有見過它之前使用 –

+0

有趣的是有人低估了我的答案,雖然我提供了明確的細節。好吧... @ZacharyElkins:我按照發布的方式運行代碼,並將垃圾郵件保存在垃圾郵件文件夾中。郵件功能中的最後一個參數是如果您發送的電子郵件被退回,則會收到通知。 – alexa0417

相關問題