Это не красиво, но можно сделать: просто используйте попытку отправить электронное письмо на недопустимый адрес и посмотрите, какое сообщение об ошибке вы получаете. Если сообщение об ошибке сообщает о неудачной аутентификации, вы знаете, что делать.
РЕДАКТИРОВАТЬ некоторый рабочий код:
вот некоторый рабочий код для проверки учетных данных Gmail. Gmail не жалуется на нелегальный @ localhost. Теперь вы можете либо попытаться найти получателя, вызвавшего исключение, либо действительно отправить письмо на адрес и немедленно его удалить. . Редактировать: даже не нужно что-то отправлять. Просто подключитесь и обработайте возможное исключение AuthenticationFailedException.
import java.util.Properties;
import javax.mail.AuthenticationFailedException;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
public class Main {
private static Session createSmtpSession(final String user, final String password) {
final Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.starttls.enable", "true");
return Session.getDefaultInstance(props, new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});
}
private static boolean validateCredentials(String user, String password) {
try {
Transport transport = createSmtpSession(user, password).getTransport();
transport.connect();
transport.close();
} catch (AuthenticationFailedException e) {
return false;
} catch (MessagingException e) {
throw new RuntimeException("validate failed", e);
}
return true;
}
public static void main(String[] args) {
System.out.println(validateCredentials(args[0], args[1]));
}
}