2011-05-27 164 views
13

我正在嘗試在我的服務器上使用php mail()函數。奇怪的是,它返回true,但我沒有收到我的電子郵件收件箱中的任何東西。mail()失敗,但返回true

然而,cpanel郵件轉發器工作正常。

因此,prolly它不是一個配置的東西,因爲轉發給我的電子郵件?

我嘗試添加在:

ini_set("sendmail_from", "[email protected]"); 

但沒有奏效。

這裏是我的代碼:

$subject = "My Subject"; 
$body = "Email Body "; 
$headers = 'From: [email protected]' . "\r\n" . 
    'Reply-To: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

if (mail($email,$subject,$body,$headers)) 
    echo "Sent!"; 
else 
    echo "Fail!"; 
+6

需要注意的一件事:「重要的是要注意,僅僅因爲郵件被接受發送,並不意味着郵件實際上會到達預定的目的地。」 – 2011-05-27 19:37:47

+2

檢查您的SMTP服務器的郵件日誌。它會解釋爲什麼郵件沒有被傳送。 – 2011-05-27 19:46:10

+0

當我的某些電子郵件出於某種原因被列爲垃圾郵件時,我遇到了goDaddy共享主機的問題。我不知道他們是如何生成這個列表的,但它是完整的和完全的bs。您的服務器可能有同樣的問題。請在這裏閱讀:http://community.godaddy.com/groups/email/forum/topic/not-receiving-all-of-my-e-mails/ - 也許您在嘗試使用的電子郵件時遇到了幾個問題發送消息。 「最常見的情況是發送郵件服務器從公共郵件列表(如senderbase.org)發送郵件信譽不佳的IP地址的可能性」 – 2011-05-27 19:51:31

回答

6

還有的可能會導致此問題的原因萬千。這裏有幾個:

  1. 收到郵件,但標記爲垃圾郵件。
  2. 收件人地址不正確。
  3. 發送郵件服務器上存在緩慢的郵件隊列。
  4. 接收郵件服務器上存在緩慢的郵件隊列。

mail()當傳出郵件服務器接受傳送郵件時返回true。您需要排除其他可能性以找出故障點。

+0

正確。可能幾天後你會收到一條消息。 – Tadeck 2011-05-27 19:47:04

+0

天后?? !!,時間移動到sendgrid或其他東西 – 2017-11-28 11:21:14

1

我有一個腳本,我正在使用的是發送和接收在同一個域的這個問題。您是否嘗試將電子郵件發送到駐留在不同域中的電子郵件地址?這可能有助於縮小可能的問題。

4

mail()函數很少返回除true以外的任何其他值。它只關心它成功給MTA(郵件傳輸代理 - 即實際發送它的程序)的郵件。

MTA只會在電子郵件格式不正確的情況下立即拒絕電子郵件。在這種情況下,您將在PHP中遇到錯誤。但它也可以拒絕電子郵件,或者在PHP接受電子郵件後發送失敗,原因很多,其中PHP不會有任何想法,因爲它已經收到了true響應。

您的MTA將有一個錯誤日誌,如果錯誤發生在本地,您可以檢查更多信息。

1

我們遇到了完全相同的問題。解決方案是在php.ini中設置適當的sendmail_path。

sendmail_path = 「/ usr/sbin目錄/ sendmail的-t -i」

設置上述問題得到了解決。

1

檢查mail.log發送測試郵件後:

sudo tail -f /var/log/mail.log 

然後,你可以看到分配給您試圖向其發送的最後一封電子郵件的ID。例如。我看到:

Jan 11 23:03:14 vagrant-ubuntu-trusty-64 postfix/pickup[17228]: 69F3441529: uid=33 from=<www-data> 

69F3441529是分配給該電子郵件中的唯一ID。然後,您可以grep日誌中有ID的所有行...

sudo grep 69F3441529 /var/log/mail.log 

然後,您應該能夠發現可能存在的任何錯誤信息,那麼谷歌他們:)

0

在我情況下,將服務器設置從IPv6地址更改爲IPv4地址解決了問題。

相關問題