2011-06-07 47 views
3

我正在開發一個android應用程序..在那個應用程序中有一個註冊module.for我必須實現電子郵件驗證功能。如何在android中實現電子郵件驗證功能

通過使用下面的代碼我可以發送電子郵件的特定電子郵件..

public void onClick(View v) { 
      // TODO Auto-generated method stub 

      try { 
       GMailSender sender = new GMailSender("[email protected]", "*******"); 
       sender.sendMail("This is Subject", 
         "This is Body", 
         "[email protected]", 
         "[email protected]" 
         ); 
      } catch (Exception e) { 
       Log.e("SendMail", e.getMessage(), e); 
      } 

     } 

但如何知道的狀態,它是否已發送或不?

回答

0

檢查下面的方法,它將驗證來自客戶端的電子郵件,只需傳遞郵件字符串它將返回一個布爾值,無論輸入的電子郵件是否正確。

public boolean isEmail(String email) 
{ 
    boolean matchFound1; 
    boolean returnResult=true; 
    email=email.trim(); 
    if(email.equalsIgnoreCase("")) 
     returnResult=false; 
    else if(!Character.isLetter(email.charAt(0))) 
     returnResult=false; 
    else 
    { 
     Pattern p1 = Pattern.compile("^\\.|^\\@ |^_"); 
     Matcher m1 = p1.matcher(email.toString()); 
     matchFound1=m1.matches(); 

     Pattern p = Pattern.compile("^[a-zA-z0-9._-]+[@]{1}+[a-zA-Z0-9]+[.]{1}+[a-zA-Z]{2,4}$"); 
     // Match the given string with the pattern 
     Matcher m = p.matcher(email.toString()); 

     // check whether match is found 
     boolean matchFound = m.matches(); 

     StringTokenizer st = new StringTokenizer(email, "."); 
     String lastToken = null; 
     while (st.hasMoreTokens()) 
     { 
      lastToken = st.nextToken(); 
     } 
     if (matchFound && lastToken.length() >= 2 
     && email.length() - 1 != lastToken.length() && matchFound1==false) 
     { 

      returnResult= true; 
     } 
     else returnResult= false; 
    } 
    return returnResult; 
} 
+0

正則表達式真的不是驗證電子郵件的最佳方式,上面的正則表達式對於.museum TLD失敗。 – Smith3 2011-06-07 05:58:42

+0

我認爲這個代碼在客戶端進行電子郵件驗證..任何方式它也有用於我的驗證部分 – Vijaya 2011-06-07 06:11:25

+0

@smith你知道如何驗證特定的電子郵件地址..? – Vijaya 2011-06-07 06:12:40

2

我假設您使用的是在this後定義的GMailSender。

內部GMailSender調用Transport.send(消息),如果發送到GMail服務器不成功,但會被捕獲和壓制,所以您的調用代碼無法知道發送是否成功。首先,您需要更改GMailSender代碼,以在發送錯誤的情況下做更有意義的事情。

您必須記住的是,您的應用程序甚至GMail服務器不會將電子郵件直接發送給最終收件人。僅僅因爲你設法正確地發送到GMail服務器,並不意味着它實際上會到達它的預期收件人,因爲它可能在其路由上的任何郵件中繼失敗。爲了正確檢測並報告郵件是否真正到達目的地,您需要比這更復雜一些的東西。

RFC 1891是支持傳遞狀態通知的SMTP協議的擴展,但您可能需要重新架構您的應用程序才能使用它。本質上,它通過在傳出消息中設置標誌來指示郵件中繼通知消息狀態。爲了讓您收到此通知,您必須擁有可以接收電子郵件的自己的郵件服務器。一旦郵件轉發成功將郵件轉發給收件人的郵箱,您將收到一封包含遞送報告的電子郵件。

因此,要正確實現這一點,您需要一個適用於您的應用的郵件帳戶,該郵件帳戶將接收發送狀態通知。您需要創建一個SMTPMessage對象,並添加一個包含「Return-Receipt-To」標題的標題,其標題值設置爲該郵件帳戶。您還需要在消息上設置NotifyOptions(),然後將其發送到GMail服務器。您的應用將需要定期檢查其帳戶以獲取投遞通知。

這是純粹以電子郵件爲中心的方法。在不知道您的確切要求的情況下,您可以使用其他機制。例如,如果您的要求純粹是驗證電子郵件地址是否存在,那麼您可以將包含URI的電子郵件發送到您控制的服務器。該URI包含唯一標識用戶和應用程序安裝的參數。用戶必須點擊該鏈接,然後服務器組件驗證郵件帳戶。然後它可以使用諸如C2DM之類的東西來通知您的應用程序該郵件帳戶是真實有效的。

對不起,如果這個答案有點長,並且不提供簡單的解決方案,但是如果你想能夠正確判斷郵件是否到達收件人,那麼就是沒有簡單的答案,我害怕。

+0

感謝您的回覆..我需要有自己的電子郵件服務器嗎?沒有其他解決方案嗎?爲什麼因爲當郵件已經發送到該電子郵件ID ,,,我想在我的數據庫註冊表中將狀態更改爲1, ,,那麼只有用戶才能登錄到應用程序.. – Vijaya 2011-06-07 06:47:26

+0

您實際上並不需要自己的郵件服務器,只需訪問郵件服務器上的帳戶即可。出於性能原因,最好爲應用程序的每個獨特安裝設置一個單獨的帳戶。如果您只想檢查一封電子郵件已發送,請參閱我的答案的第一部分。如果您想要確認電子郵件何時已發送給收件人,那麼還有其他替代方法已添加到原始答案中。 – 2011-06-07 06:56:11

+0

你是說我需要更改gmaisender代碼部分。我該如何更改...爲什麼becz我是新手android.please指導我 – Vijaya 2011-06-07 07:16:29