我正在提示我的应用用户提供电子邮件凭据。
用户插入电子邮件并通过后我想验证帐户。
我正在使用 javax.mail 。有没有办法验证帐户?只确保凭证确实有效 - 否则我想显示无效的用户并传递消息。
也许有一些方法可以执行:
Transport.send(message);
在不发送任何内容的情况下检查身份验证异常。
答案 0 :(得分:1)
嗨,你可以做这样的事情
public final static boolean validateEmail(CharSequence givenSeq) {
if (givenSeq!= null) {
return android.util.Patterns.EMAIL_ADDRESS.matcher(givenSeq).matches();
} else {
return false;
}
}
答案 1 :(得分:0)
您可以创建合理性检查,例如(仅仅是示例,远离完成):
String email = "anonym.user@mail.com";
if (!email.contains("@") || !email.contains(".") || !(email.lastIndexOf(".") > email.indexOf("@")))
showError();
答案 2 :(得分:0)
试试这个:
/**
* validate your email address format. Ex-xyz@abc.com
*/
public boolean emailValidator(String email)
{
Pattern pattern;
Matcher matcher;
final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return matcher.matches();
}
答案 3 :(得分:0)
您可以创建传输对象并管理连接以验证用户名/传递是否有效。
Address[] to = InternetAddress.parse("me@localhost");
Transport t = session.getTransport(to[0]);
t.connect();
t.close();
如果您要验证用户名/通行证和信封,只需创建一条消息,其中包含所有信封信息但没有内容。或者创建一个具有恶意writeTo(OutputStream)方法的MimeMessage的子类。
MimeMessage msg = new MimeMessage(session);
Address[] from = InternetAddress.parse("me@localhost");
Address[] to = InternetAddress.parse("me@localhost");
msg.addFrom(from);
msg.setRecipients(Message.RecipientType.TO, to);
ByteArrayOutputStream out = new ByteArrayOutputStream(384);
msg.saveChanges();
try {
msg.writeTo(out);
throw new AssertionError();
} catch (MessagingException | IOException test) {
try {
Transport.send(msg);
throw new AssertionError();
} catch (MessagingException | IOException expect) {
if (!exceptionEqual(test, expect)) {
//Notify the user....
}
}
}
这样做的原因是内容是最后写的,所以如果Transport.send使它成为Message.writeTo那么你毫无疑问地知道你可以登录到邮件服务器。此外,服务器会通知您是否接受了信封信息。然而,仅仅因为它接受了信封并不意味着交付将成功。因为Message.writeTo会抛出异常,所以不会发送实际的电子邮件消息。