Разбор адресов электронной почты 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. Вот тот, который я нашел быстро. Я уверен, что есть другие.