2012-10-13 227 views
3

我已經使用SMTP命令「檢查/驗證」電子郵件地址(無論它是否存在)。但問題是,它有時會接受電子郵件作爲有效的電子郵件地址,有時不會。PHP電子郵件驗證

這是SMTP服務器的限制(出於安全目的)在驗證電子郵件?如果是這樣,那麼我有什麼替代方法?

+0

由於垃圾郵件發送者,幾乎所有的smtp服務器都禁用了VRFY命令。 – Zaffy

+8

所以你想知道用戶輸入時是否存在電子郵件地址?如果是這樣 - 最簡單的方法是發送用戶點擊的確認郵件 – Laurence

+0

很少有相關/重複/可能有幫助:[電子郵件驗證PHP](http://stackoverflow.com/q/4985174/1338846),[如何以驗證電子郵件地址是否存在?](http://stackoverflow.com/q/2750175/1338846),[如何檢查電子郵件地址是否存在而不發送電子郵件?](http://stackoverflow.com/q/565504/1338846),[在php -closed-中驗證電子郵件](http://stackoverflow.com/q/3499192/1338846),[PHP電子郵件驗證鏈接的最簡單方法](http://stackoverflow.com/q /1338846分之3794959)。這裏也很少有其他的...... –

回答

1

最好的方法是從用戶那裏得到確認。使用用戶名創建一個隨機數,使用mt_rand()並在創建時將其存儲在數據庫中。保留國旗activated0

用存儲在數據庫中的激活密鑰(隨機數)發送一封郵件。小可能的方式是這樣的:

<?php 
    $random = mt_rand(1, 1000); 
    $random = $username . $random; 
    # Store the $random in the DB. 

    # Now send a mail 
    mail($userEmail, "Confirm", "Your Unique ID is $random"); 
?> 
2

如上所述,大多數電子郵件服務器關閉VRFY命令,因爲它很容易從垃圾郵件發送者電子郵件收穫。

有驗證電子郵件幾個選項解決

1)使用的電子郵件驗證鏈接。這可能會導致轉換率下降,因爲如果您發送的驗證電子郵件數量過多,可能會讓您的電子郵件發件人(無論是您還是ESP會向您投訴)陷入麻煩。如果您有任何傳遞能力問題,鏈接將最終位於垃圾郵件/批量文件夾中,並且永遠不會被點擊。如果您關心轉換和/或支持票據,我不是這種方法的忠實粉絲。我對此做了一些研究,並寫了一篇博客文章,如果您有興趣:http://blog.strikeiron.com/bid/54483/Email-Verification-Links-Kill-Your-Conversion-Rate

2)使用付費工具。 a)實時API - 有些公司(全面披露,我的公司是這個領域的公司之一)提供付費解決方案,能夠實時驗證電子郵件的準確性高(> 95%)。 b)數據庫查詢供應商 - 這是收集的電子郵件與數據庫進行比較的另一付費選項。通常較便宜但不如實時準確 c)用於PC的工具 - 避免這種情況。他們不準確,會將您的IP地址列入黑名單。

3)做一個快速檢查(正則表達式,檢查MX服務器等),並接受模糊的電子郵件有效。根據你的音量和觀衆,這可能是一個不錯的選擇。

希望這會有所幫助。

Justin