2011-12-05 66 views
5

我從PHP郵件發送郵件():和我想收到失敗的消息,如果發送失敗的目的地。如何知道如果PHP郵件失敗

$to = '[email protected]'; 
    $email_from = "[email protected]"; 

    $full_name = 'XXXX'; 
    $from_mail = $full_name.'<'.$email_from.'>'; 



    $subject = "testing sender name"; 
    $message = ""; 
    $message .= ' 
      <p><strong>This is only a test mail. Please do not reply.</strong><br /> 
    '; 
    $from = $from_mail; 

    //$headers = "" . 
    //   "Reply-To:" . $from . "\r\n" . 
    //   "X-Mailer: PHP/" . phpversion(); 

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


    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";   

    if(!mail($to,$subject,$message,$headers)) 
    { 
     echo 'failed !!'; 
    } 

但是,儘管$to郵件確實不存在,也沒有顯示failed !!

+0

如果您設置了「發件人」和「回覆郵件」標題,那麼您真正希望的就是收到該地址的回覆。還有一個單獨的'Bounces-To:'頭可以指定。 –

+0

這是因爲在PHP將消息傳遞給SMTP服務器進行傳遞之後,它無法直接知道傳遞的成功或失敗。 SMTP服務器不一定會立即傳遞消息。你只能等待反彈。 –

+0

因此,幾乎沒有辦法知道郵件信息是否失敗或成功? – AssamGuy

回答

3

我想你想要的是檢查真實的電子郵件不僅是一個有效的格式化電子郵件。所以我建議你看看這個blog

+0

是的SeRPRo,確切地說。我現在會檢查博客。謝謝 – AssamGuy

+0

@AssamGuy歡迎:) – SERPRO

1

不過,儘管$以郵件確實不存在,也沒有顯示失敗!

實際上郵件正被傳遞到SMTP服務器的事實並不意味着它將被傳遞給最終用戶。 PHP中沒有簡單的方法來檢查它是否交付。

5

郵件方法只是發送郵件。如果它沒有收到任何錯誤(例如,通過找不到服務器等),它將返回succesfull。你將無法知道郵件收件人的收件箱中已經想到了,除非你創造一些代碼周圍退回的電子郵件等

3

檢查從mail

返回true如果郵件是回報已成功接受發貨,否則爲FALSE 。

重要的是要注意,僅僅因爲郵件被接受爲 交付,它並不意味着郵件實際上會到達預期的 目的地。

雖然它可能返回true的事實意味着你的郵件程序被接受的消息,但隨後當它試圖發送到沒有人失敗...

您應該通過驗證程序來運行$to檢查它的一個有效地址,然後拋出一個錯誤,如果沒有,不要依靠mail()來篩選出你已經知道錯誤的東西,或者可以輕鬆地檢查。

--update

然後檢查@SeRPRo,但你的努力做的就是努力工作以編程測試 - 它更容易和更可靠發送電子郵件要求用戶點擊一個鏈接以驗證它是真實的,而不是嘗試查詢所有具有不同行爲的SMTP服務器(讀取:分解到不同程度)。另外請注意,您的預期行爲(代碼明智)很難與垃圾郵件發送者區分開來,因此如果您避開驗​​證電子郵件路由,發現它很困難就不會感到驚訝。

+0

之後,它變得不可知,但在上面的例子中'$ to'是有效的電子郵件,但它不存在。所以我無法找到郵件到$ to的郵件是否失敗? – AssamGuy

0

你可以把自己作爲測試它離開發件箱的一種方式。

+0

我沒有得到你..你可以解釋一下 – AssamGuy

0

在我的情況下,它幫助通過命令行參數「-f」設置返回路徑,該參數可以在mail()的$ additional_parameters參數中傳遞。所以我打電話

mail($to, $subject, $message, $headers, "-f address.where.i.want.the.b[email protected]"); 

...根據一些關於http://www.php.net/manual/en/function.mail.php的評論,hosts-inviroments反應不同,並有不同的限制(地址可能需要在同一個主機帳戶中註冊,或者與heade中的「From:」位於同一個域中。等等)

在那裏我得到要接收的反彈(與所提到的限制非,因爲它似乎頁)在Domainfactory http://www.df.eu

0

使用PHPMailer的託管發送電子郵件和設置$ MAIL-> AddCustomHeader( '返回路徑:[email protected]'); 如果收件人郵件ID不存在或收件人未收到任何其他情況的電子郵件,則會在[email protected]發送退信電子郵件。

相關問題