如何在android中实现电子邮件验证功能

时间:2011-06-07 05:47:38

标签: android email

我正在开发一个Android应用程序..在该应用程序中有一个注册模块。因为我必须实现电子邮件验证功能。

通过使用以下代码,我可以发送特定电子邮件的电子邮件..

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

            try {   
                GMailSender sender = new GMailSender("username@gmail.com", "*******");
                sender.sendMail("This is Subject",   
                        "This is Body",   
                        "rose.jasmine87@gmail.com",
                        "naresh_bammidi@yahoo.co.in"
                        );   
            } catch (Exception e) {   
                Log.e("SendMail", e.getMessage(), e);   
            } 

        }

但是如何知道状态,是否已经发送?

2 个答案:

答案 0 :(得分:2)

我假设您正在使用this帖子中定义的GMailSender。

内部GMailSender调用Transport.send(消息),如果发送到GMail服务器不成功,将抛出异常,但这被捕获并被抑制,因此您的调用代码无法知道发送是否成功。首先,您需要更改GMailSender代码,以便在发送错误的情况下执行更有意义的操作。

您必须记住的是,您的应用甚至GMail服务器都不会直接向最终收件人发送电子邮件。仅仅因为您设法正确发送到GMail服务器,并不意味着它实际上会到达其预期的收件人,因为它可能在其路由上的任何邮件中继失败。要正确检测并报告邮件是否真正到达目的地,您需要的东西比这更复杂。

RFC 1891是支持递送状态通知的SMTP协议的扩展,但您可能需要重新设计应用程序才能使用此功能。本质上,它通过在传出消息中设置标志来指示邮件中继通知您消息状态。为了让您收到此通知,您必须拥有自己的邮件服务器,它能够接收电子邮件。一旦邮件中继将邮件中继成功发送到收件人的邮箱,您将收到一封电子邮件,其中包含一份送达报告。

因此,要正确实施此功能,您需要一个适用于您的应用的邮件帐户,该帐户将收到递送状态通知。您需要创建一个SMTPMessage对象,并添加一个包含“Return-Receipt-To”标题的标题,其值设置为此邮件帐户。您还需要在邮件上设置NoNotifyOptions(),然后将其发送到GMail服务器。您的应用需要定期检查其帐户以获取投放通知。

这是一种纯粹以电子邮件为中心的方法。在不知道您的确切要求的情况下,您可以使用其他机制。例如,如果您的要求纯粹是为了验证电子邮件地址是否存在,那么您可以向您控制的服务器发送包含URI的电子邮件。 URI包含唯一标识用户和应用安装的参数。用户必须单击该链接,您的服务器组件才会验证该邮件帐户。然后,它可以使用类似C2DM的内容来通知您的应用,该邮件帐户是真实有效的。

很抱歉,如果这个答案有点长,并没有为您提供简单的解决方案,但如果您希望能够正确判断邮件是否到达其收件人,那么 并非简单回答,我很害怕。

答案 1 :(得分: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;
 }