Разбор адресов электронной почты RFC 2822 на Java

Поскольку многие люди не знают, адреса электронной почты требуют библиотеки для анализа. Простые регулярные выражения, как @(.*) не достаточно. Адреса электронной почты могут даже содержать комментарии, которые могут содержать такие символы, как @, нарушая простые регулярные выражения.

Существует библиотека Node.js, которая анализирует адреса RFC 2822:

var address = addresses[0];
console.log("Email address: " + address.address);
console.log("Email name: " + address.name());
console.log("Reformatted: " + address.format());
console.log("User part: " + address.user());
console.log("Host part: " + address.host());

который является почти прямым портом модуля Perl Mail::Address,

Это то, что я ожидал бы существовать в Java InternetAddress класс, но он не разбивает вещи дальше, чем полный адрес, который может включать, например, user@gmail.com, Но я пытаюсь извлечь gmail.com часть, которая не включает в себя метод, чтобы сделать.

Я удивлен, что не могу найти общую библиотеку, которая решает эту проблему, но, вероятно, у многих людей есть эта проблема. Как это можно решить с помощью библиотеки или нет?

2 ответа

Если вам нужно просто получить часть домена с адреса электронной почты (помните о группах рассылки, поскольку у них нет @), вы можете сделать это следующим образом:

int index = "user@domain.com".lastIndexOf("@");
String domain = "user@domain.com".substring(index+1);

Я использовал lastIndexOf здесь, так как по RFC2822 адрес электронной почты может содержать более одного символа @ (если он экранирован). Если вы хотите пропустить группы рассылки, в InternetAddress есть метод isGroup ()

PS также может быть, что адрес содержит информацию о маршрутизации:

@donald.mit.edu,@mail.mit.edu:peter@hotmail.com

Или адресные литералы:

peter@[192.168.134.1]

В большинстве случаев нет необходимости разбивать адрес на составные части, поскольку вы ничего не можете сделать с этими частями. Предполагая, что у вас есть действительная потребность, существуют библиотеки, которые выполнят более полную проверку, чем JavaMail. Вот тот, который я нашел быстро. Я уверен, что есть другие.

Другие вопросы по тегам