#java #parsing #email #imap
#java #синтаксический анализ #Адрес электронной почты #imap
Вопрос:
Я пытаюсь проанализировать ответ, возвращенный IMAP, который содержит содержимое электронного письма. Как я могу определить начало и конец сообщения, возвращаемого из ответа, полученного через IMAP?
Ниже приведены 2 примера ответов, когда я получаю электронное письмо через IMAP:
. fetch 3728 body.peek[1]
* 3728 FETCH (BODY[1] {45}
Hello,
This is test message 1.
:(
:)
)
* 3732 FETCH (FLAGS (Seen Recent))
* 3733 FETCH (FLAGS (Seen Recent))
. OK FETCH completed.
И второе извлечение:
. fetch 3729 body.peek[1]
* 3729 FETCH (BODY[1] {42}
Hello,
This is test message 2. :)
)
The above bracket is part of the message's content.
)
. OK FETCH completed.
Во-первых, оба извлечения иногда дают разное окончание, когда на учетную запись поступают новые электронные письма. Во-вторых, похоже, что сообщение заканчивается скобкой и . OK FETCH Completed
ответом. Но что произойдет, если содержимое тоже состоит из скобок? Тогда я могу прочитать неправильную скобку и никогда не получить полное содержимое.
Таким образом, при анализе ответа из IMAP, как я должен интерпретировать ответ и правильно получать содержимое?
Ответ №1:
Вы должны прочитать rfc 3501 …
Строки IMAP могут быть представлены в 2 формах: 1) Строка в кавычках. 2) строковый литерал.
Строковый литерал synatx: {number_of_bytes}CRLF — здесь вам нужно прочитать количество байтов. ПРИМЕЧАНИЕ: БАЙТЫ, а не строка!!!
Также, как указано в спецификациях IMAP: вы должны быть готовы проанализировать любой ответ в любое время, также любая строковая часть может быть строковым литералом.
Стабильное кодирование — полнофункциональный IMAP-клиент — непростая задача.