2011-06-07 49 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