2011-08-10 60 views
0

我想寫一個非常簡單的PHP代碼,發送電子郵件到給定的地址。用php發送電子郵件

I have this code: 
<?php 
mail('[email protected]','Test','Test OK'); 
echo 'Message sent!'; 
?> 

而不是'[email protected]'我用我自己的電子郵件。

我已經啓用PHP使用foundationphp中給出的指示,因爲我正在運行一個帶有雪豹的mac。

php似乎正在工作,因爲我得到了「消息發送!」回聲,但是我沒有收到任何電子郵件。

任何想法爲什麼會發生這種情況?我究竟做錯了什麼?

在此先感謝!

+0

檢查郵件是否首先返回false。要查找實際的錯誤,請檢查系統日誌(如果使用SendMail,通常在Linux下爲/ var/log/messages)。還要確保在php.ini中將錯誤報告設置爲E_ALL,以便您可以查看錯誤。 – bcoughlan

+0

Sendmail通常會登錄到'/ var/log/maillog',而不是'messages'?我們知道這不是Linux,但它是OS X. –

+1

您可能沒有安裝和配置smtp服務器。試試這個代碼(http://stackoverflow.com/questions/712392/send-email-using-gmail-smtp-server-from-php-page/2748837#2748837),如果你有一個Gmail帳戶,使用Gmail的SMTP郵件看看是否是這種情況。 –

回答

5

首先,你根本沒有檢查返回值mail,你會回顯「Message sent!」即使它返回了錯誤。

if (mail('[email protected]','Test','Test OK')) { 
    echo 'Message sent!'; 
} 

其次,即使mail返回true,這只是意味着它交給郵件到MTA,而不是郵件到達目的地。如果PHP成功交付郵件,那麼您需要查看郵件日誌並在那裏進行調試,因爲問題不在PHP代碼/配置中。

2

如果你在你的本地機器上運行它,你的電子郵件可能不會去任何地方。 PHP的mail函數不知道你是否有適當的傳出郵件連接,它只知道郵件是否成功進入本地隊列。

重要的是要注意,僅僅因爲郵件被接受交付,並不意味着郵件實際上會到達預期的目的地。 - http://php.net/mail

對於非服務器機器,最好的辦法是設置一個遠程SMTP服務器(通常是ISP的服務器)。 http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Remote_SMTP_Server_for_Sending_Mail.htm

+0

我在本地機器上運行。我認爲這是實際的問題。我會嘗試配置SMTP服務器。謝謝! –

1

您收到回聲「發送的消息!」因爲你沒有問過郵件()是否成功:

if (mail(...)) 
{ 
    echo 'Message sent!'; 
} 
else 
{ 
    echo "Fail!"; 
} 

這應該給你一個正確的反饋。