我正在开发一个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);
}
}
但是如何知道状态,是否已经发送?
答案 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;
}