2011-10-17 51 views
1

以下是我使用的時候我們他(或她)添加到我們的系統,以驗證用戶的電子郵件地址的功能:checkdnsrr不適用於.edu電子郵件地址?

private function validate_email($email){ 
    list($userName, $mailDomain) = split("@", $email); 
    if (!checkdnsrr($mailDomain, "MX")) { //.edu does not work? 
     return false; 
    } 
    return true; 
} 

出於某種原因,這個功能總是似乎當我進入返回false .edu地址我知道有效。

如何修復該功能,以便它能夠驗證並返回所有電子郵件類型的true

+0

我的2美分:完全擺脫驗證。檢查它是否符合'* @ *'並將其他所有內容拋出窗外。無論如何它是無用的 - 如果你需要確定一個特定的電子郵件地址存在,你仍然需要發送一個確認鏈接。 –

+0

@皮卡 - 我們發送確認鏈接,但我們不知道他們是否收到它,如果我們假設地址總是有效的,我們不知道他們是否得到了確認... – Neal

+0

我編輯了評論 –

回答

0

如果主機名不具備的MX記錄,但確實有一個A(或AAAA)記錄,符合郵件傳輸代理將直接試圖在記錄(RFC 5321 section 5)給出的地址發貨:

「如果返回一個空的MX列表,則將該地址視爲與隱式MX RR相關聯,優先級爲0,指向該主機。」

因此,沒有MX記錄並不一定表示郵件無法傳遞到該主機。


附錄:就像佩卡在評論中說,告訴的唯一可靠方法,如果電子郵件地址是有效的是將郵件發送到它,看看它是否被交付。如果你擔心候選人試圖通過聲稱他們沒有得到信息而作弊,你可以做這樣的事情:

  1. 要求候選人的電子郵件地址,併發送一條確認消息給它。在郵件中包含確認鏈接(和/或候選人可以在表格中輸入的確認碼)。
  2. 一旦候選人確認他們已通過點擊鏈接收到該消息,請發送給他們實際測試。
+0

RE:你的附錄 - 候選人仍然可以聲稱他們沒有得到測試,然後我們會發出一個新的鏈接,這將如何工作? – Neal

+0

如果他們收到確認電子郵件,您知道他們提供的電子郵件地址是正確的並且正常工作。這是儘可能多的確認,你可以有。如果他們仍然聲稱他們得到了確認信息,但某種程度上沒有得到測試,那麼你想要做什麼,然後由你決定。 –

-2

也許你的edu提供者不允許任何人看到他們的dns記錄。

+0

這是不太可能的,特別是對於用於電子郵件的域。 – duskwuff

1

MX記錄實際上並不是強制接收電子郵件。如果沒有MX記錄,符合標準的MTA將回退到A記錄(如果有)。一些教育機構可能依靠這種行爲;這當然不被認爲是最佳做法,並且會導致一些郵件傳遞問題,但它至少通常會起作用

+0

這並不能解決我的問題。這只是陳述事實... – Neal

+1

解決方案是隱含的:刪除現有的'checkdnsrr'檢查,或添加一個檢查'A'記錄。 – duskwuff

相關問題