2013-04-25 39 views
4

我正在開發一個從PIPE獲取電子郵件的系統,驗證電子郵件發送的電子郵件地址是否在客戶端數據庫中,並將其寫入數據庫。如何檢查收到的電子郵件是否合法?

的問題是,我不希望有安全的問題,如果有人發送一封電子郵件,PHP的系統,它將記錄它。那麼,如何檢查電子郵件是否由正確的郵件服務器發送?我正在考慮獲取域的郵件服務器的IP,並在電子郵件標題中驗證它是否從這些服務器發送。所以,如果我收到來自[email protected]的電子郵件,它會ping mail.hotmail.com並檢查電子郵件是否來自這些IP地址。

無論如何,如果有人有一個自定義域一樣yourdomain.com,在共享的cPanel服務器上運行,其他人在這些服務器可以發送電子郵件與PHP和獲取IP校驗通過。所以,我在考慮檢查電子郵件是使用PHP還是從郵件服務器發送的,但我不知道如何執行此操作。

,你有何建議?

+0

[發件人政策框架(SPF)](http://en.wikipedia.org/wiki/Sender_Policy_Framework)和[DomainKeys Identified Mail(DKIM)](http://en.wikipedia.org/wiki/DomainKeys_Identified_Mail)浮現在腦海中。你還需要更多建議嗎? – hakre 2013-04-25 11:53:40

+1

我會看看並讓你知道。感謝您的幫助。 – user2271353 2013-04-25 11:58:56

+0

如果您的問題僅限於兩個郵件服務器()和郵件服務器之間,請參見下面的答案。最好選擇SPF和DKIM,並根據這些評分進行評分。你的郵件服務器也可以在這裏做一些工作,在收到的信息中添加標題,所以你不需要重新發明輪子。 – hakre 2013-04-25 11:59:49

回答

1

我發現http://verify-email.org/你。他們有一個API,所以你可以檢查該服務的電子郵件地址。

編輯

當您檢查網站上的電子郵件ADRES你看到這樣的結果:

MX record about gmail.com exists. 
Connection succeeded to alt3.gmail-smtp-in.l.google.com SMTP. 
220 mx.google.com ESMTP tz3si2159695bkb.62 - gsmtp 

> HELO verify-email.org 
250 mx.google.com at your service 

> MAIL FROM: <[email protected]> 
=250 2.1.0 OK tz3si2159695bkb.62 - gsmtp 

> RCPT TO: <[email protected]> 
=550-5.1.1 The email account that you tried to reach does not exist. Please try 

550-5.1.1 double-checking the recipient's email address for typos or 

550-5.1.1 unnecessary spaces. Learn more at 

550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 tz3si2159695bkb.62 - gsmtp 

您可以通過登錄到SMTP服務器建立自己的檢查和發送命令你見上:

> HELO verify-email.org 
> MAIL FROM: <[email protected]> 
> RCPT TO: <[email protected]> 

您可以檢查輸出中的錯誤或成功消息。我認爲在PHP中建立並不困難。

+0

該API通常被稱爲DNS和SMTP。如果您想回答這個問題,您應該更好地解釋如何使用PHP代碼自己完成該操作。另請參閱http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers – hakre 2013-04-25 11:49:21

+0

我無法使用付費服務,因爲我不會是隻有使用它的人,我不能要求那些會使用它的人購買它。但是謝謝你的幫助。 – user2271353 2013-04-25 12:00:36

+0

通過添加關於我如何認爲網站進行電子郵件檢查的解釋來編輯我的答案。 – JackPoint 2013-04-25 14:08:30

1

我想在檢查郵件是否與PHP或從郵件服務器

您將無法找出這兩個通常的區別發送。並用PHP發送電子郵件可以長得一模一樣就像從郵件服務器的電子郵件,很可能是用PHP 發送的電子郵件也從郵件服務器的郵件的情況。

您可以嘗試根據您所做的監控並找出錯誤的郵件(或者如果您因爲法律而無法深度監控電子郵件而從您的用戶報告的郵件),自行編寫檢測(您自己的過濾器)條例)。

1

嗯,這是我第一次回答什麼很抱歉,如果我誤解了。無論如何,如果你正在用PHP檢查電子郵件,我有一些可能的幫助;

If($_POST['email']){ 
    $Email = $_POST['email']; 
    $Allowed = array('gmail.com', 'yahoo.com', 'ymail.com', etc..); 
    If(filter_var($Email, FILTER_VALIDATE_EMAIL)){ 
     $Domain = array_pop(explode('@', $Email)); 
     If(!In_Array($Domain, $Allowed)){ 
      Echo 'Your response here...'; 
}}} 

或者用於檢查電子郵件的字符,您可以調用函數或自己檢查;

Function checkEmail($Email){ 
    return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $Email); 
} 

所以它會是這樣的;

checkEmail('[email protected]'); 

檢查輸入,如果它沒有電子郵件字符,您可以選擇要做什麼。

希望這有助於!

相關問題