2010-06-09 97 views
0

我有下面的代碼工作的一些服務器上和別人不工作:PHP的郵件功能無法發送郵件到某些服務器

$Name = "myname"; //senders name 
      $email_sender = "[email protected]"; //senders e-mail adress 
      $recipient = $email; //recipient 
      $mail_body = "The text for the mail..."; //mail body 
      $subject = "Subject for reviever"; //subject 
      $header = "From: ". $Name . " <" . $email_sender . ">\r\n"; 
         $status = mail($recipient, $subject, $mail_body, $header); 
      print('ENVOI '. $status); 

的$狀態變量是真實的,但我沒有看到任何郵件。

+0

檢查垃圾郵件文件夾? – kennytm 2010-06-09 09:02:21

+0

它是Windows還是Unix服務器?要麼可能被錯誤配置。 – Matijs 2010-06-09 09:06:03

回答

0

這可能是也可能不是相關的,但你有一個非常簡單的頭,我會用類似下面的東西來替換你的頭變量,看看是否改變了你的任何東西。

$headers = 'From: ' .$email_sender. "\r\n" . 
    'Reply-To: ' .$email_sender. "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 
+0

服務器是APACHE SERVER,我檢查sendmail_from函數沒有任何價值,然後我把[email protected],但我仍然沒有看到我的收件箱中的電子郵件。 – Mamadou 2010-06-09 10:28:56

+0

嗯,我不認爲使用正確的域名是localhost.com。 – Sam152 2010-06-09 10:49:01

+0

嗨,大家好,我無法解決我的郵件服務器問題!我聽到了一個'PHPMAILER'回合。這可能會幫助我使用郵件php功能!有人可以告訴我更多關於這個, MERCI – Mamadou 2010-06-14 09:41:56

0

請確保您的smtp設置在相關服務器上正確。

1

$狀態爲true並不意味着郵件是由您的收件人收到的。這僅表示郵件功能已成功將郵件發送給本地遞送代理。之後,它已經脫離了PHP的手。

的過程看起來是這樣的:

  1. PHP腳本調用mail()
  2. mail()傳遞消息到本地郵件服務器(sendmail的,後綴,進出口等。)
  3. mail(),其成功完成'送達'電子郵件,返回TRUE
  4. 本地郵件服務器連接到收件人的郵件服務器,發送郵件
  5. 收件人的郵件服務器會執行任何操作將電子郵件收件人的收件箱中。

由於mail()返回true,這意味着至少您的發送代碼是正確的,不會導致事情在這個階段炸燬。這會在您和收件人的郵件服務器之間留下遞送問題:

a)也許收件人使用灰名單(在這種情況下郵件應該最終顯示)。也許你的服務器在灰名單超時時間到期之前放棄,所以從不做重試嘗試。 b)你的郵件服務器被列入黑名單。您的服務器和/或其他潛在的垃圾郵件源位於同一個網絡塊中已添加到收件人預訂的一個或多個反垃圾郵件RBL列表中。

c)也許遠程服務器是非常棘手的關於頭正確性和你的服務器有點太放鬆一個或多個頭。

至少這些問題應該可以在您自己的郵件服務器的maillog中看到(通常在大多數Unix-ish系統上是/ var/log/maillog)。嘗試在觀看日誌的同時發送測試郵件,以查看郵件如何通過系統進行。同時檢查服務器的傳出郵件隊列(通常爲mailq命令)。也許缺少的信息會停留在那裏。

然後還有更大的問題:

d)遠程郵件服務器被接受的消息,只是默默地折騰它,因爲它標記爲垃圾郵件或感染。這不能從您自己的郵件日誌中檢測到,因爲這完全是在收件人一端完成的。你會看到的是「250 OK」的成功信息。

爲此,您需要收件人幫助診斷問題。

+0

謝謝你的迴應真的很清楚。我要檢查maillog,在php.ini中檢查郵件服務器的路徑。我會回來告訴發生了什麼! – Mamadou 2010-06-11 15:10:57

相關問題