Java InternetAddress не подтверждает правильность электронной почты - PullRequest
0 голосов
/ 07 мая 2020

У меня есть способ проверить адрес электронной почты.

public boolean isValidEmailAddress(String email) {
        boolean result = true;
        try {
            InternetAddress emailAddr = new InternetAddress(java.net.IDN.toASCII(email));
            emailAddr.validate();
        } catch (AddressException ex) {
            result = false;
        }
        return result;
    }

Я написал модульный тест, и он принимает abce@cdf, он не ищет .com или что-то в этом роде.

   Assert.assertEquals(
                new CustomRuleEmailService().isValidEmailAddress("abc@cdf"),
                false
        );

возвращает true вместо false

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Когда вы проверяете JavaDo c на InternetAddress.validate(), вы можете увидеть:

Подтвердите, что этот адрес соответствует синтаксическим правилам RF C 822.

И в вики для адреса электронной почты описывается как:

Адрес электронной почты обычно распознается как состоящий из двух частей, соединенных знаком «@», хотя техническая спецификация подробно описана в RFC 822 и последующие RFC более обширны

Итак, все работает как ожидалось

0 голосов
/ 07 мая 2020

Хотя foo@server технически является законным адресом электронной почты, вполне возможно захотеть ограничить адреса одним из «реальных доменов».

Теперь определение «реального домена» нетривиально и никогда -изменяется, поэтому я бы не стал сам писать код и вместо этого полагался бы на существующий код.

Например, Guava предоставляет класс InternetDomainName, который предоставляет IsUnderRegistrySuffix метод который принимает foo.com, foo.bar.com и example.accountant, но отклоняет foo.thisIsNotaTld или просто foo.

Комментарий основного класса этого класса также имеет хорошее объяснение проблема и возможные решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...