2011-12-19 54 views
1

我通過php發送用戶激活鏈接,我只有一個正則表達式來檢查電子郵件是否由*@*.*組成,這很好,但我想檢查電子郵件是否也實際發送。發送郵件並驗證實際的電子郵件?

我試着用

if (mail(....)) { 
    // success 
} else { 
    // error 
} 

做這個但是,當我進入[email protected]電子郵件仍然通過對成功的一步去。

我怎樣才能真正檢查它是否是一個正確的電子郵件在PHP中,謝謝。

回答

2

從PHP文檔

布爾郵件(字符串$到,串$主題,串$消息[,字符串$ additional_headers [,字符串$ additional_parameters])

返回true郵件已成功接受發送,否則爲FALSE 。

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

只是因爲電子郵件地址格式正確並不意味着在該位置有實際的郵箱。 PHP無法「檢查」電子郵件地址是否存在/處於活動狀態。這是激活鏈接的全部目的,以驗證某人正在檢查該電子郵件地址。

+0

cgwebprojects對不起,但你錯了。我上面發佈的內容是正確的。你現在要問一個完全不同的問題 「我只有一​​個正則表達式來檢查電子郵件是否包含*@*.*,這很好,但我想檢查電子郵件是否實際發送。」 您只問是否發送。你從未要求驗證電子郵件。當然@Dagon是正確的檢查一個有效的電子郵件,但你要求「但我想檢查電子郵件實際上是否也發送」 – JoshStrange 2011-12-19 19:20:02

+0

我不同意,所有主要的在線電子郵件服務,其中一些使用PHP會告訴你該電子郵件地址在嘗試發送時不是實際的電子郵件地址。 – cgwebprojects 2011-12-19 19:20:25

+0

我在問上面的同樣的問題,我如何驗證實際的電子郵件,我的方法顯然是錯誤的,但說php不能做到這一點只是簡單的傻! – cgwebprojects 2011-12-19 19:21:28

3
  1. 驗證電子郵件

    if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) { 
        echo "VALID"; 
    } 
    
  2. preoperly地址的電子郵件服務器將返回true在接受電子郵件,它不知道它是否會得到用戶要做到這一點的唯一途徑,而我確信你已經看到它,是讓收件人單擊電子郵件中的鏈接,將它們發送回您的網站,然後您知道它的有效\使用地址。

0

+1 for filter_var()。使用它而不是一個簡單的正則表達式。即使是最複雜的正則表達式也無法讓所有可能的方式將一個RFC 5322兼容地址放在一起。你想出的東西幾乎肯定會失敗。

但是您並沒有詢問地址格式驗證,您詢問了有關檢查郵件是否已發送的問題。激活鏈接的全部目的是驗證電子郵件地址。如果您定期清理未經驗證的帳戶,則電子郵件地址結構是否正確無關緊要。通過發送鏈接,您可以進行全電路測試,繞過filter_var()可能存在的任何可能的格式錯誤解釋。