Я работаю с InternetAddress в Java. Я использовал приведенный ниже фрагмент кода.
InternetAddress internetAddress = new InternetAddress("king<***@***.com>");
System.out.println(internetAddress.getPersonal());
В этом случае он возвращает короля в качестве вывода.
InternetAddress internetAddress = new InternetAddress(",<***@***.com>");
System.out.println(internetAddress.getPersonal());
В этом случае исключения нет, но возвращается null.
Здесь запятая не заключена в двойные кавычки, тогда как это принимается и почему возвращает ноль вместо запятой?
Спасибо.
Запятые используются для списков. См. rfc822
Судя по документации функции синтаксического анализа InternetAddress
, в которой говорится, что параметр addressList интерпретируется как список адресных строк, разделенных запятыми, очень вероятно, что java видит это как два электронных письма, один недействительный (пустой) адрес и один без личного адреса.
Ваш вызов конструктора new InternetAddress("xyz") затем передается для прямого синтаксического анализа, как вы можете видеть здесь
Существует специальная обработка запятых, когда он пытается определить запятые как список адресов, который вы можете увидеть здесь.
Соответствующая документация: https://docs.oracle.com/javaee/6/api/javax/mail/internet/InternetAddress.html#parse
Да, и можно привести аргумент, что в этом случае он должен генерировать исключение синтаксического анализа, поскольку он ожидает только один адрес, а вы дали ему список из двух, один из которых пуст.
Возможно, эта запятая интерпретируется как разделенный список отправителей, в функции parse() есть код специально для обработки запятых, но я не понял всю функцию, проверьте исходный код здесь: github.com/javaee/javamail/blob/master/mail/src/main/java/javax/…