Я не знаком с javamail, но я знаком с протоколом IMAP ( RFC 3501 ), и я бы попробовал следующие подходы:
- Используйте команду FETCH, чтобы получить заголовок Content-Type элемента. Это работает, только если поле заголовка Content-Type элементов Tasklist или Calendar отличается от поля, используемого в обычных сообщениях электронной почты. Другая проблема заключается в том, что некоторые IMAP-серверы, как известно, не поддерживают извлечение отдельных полей заголовка (но в этом случае вы все равно можете получить весь заголовок со всеми полями, используя BODY.PEEK [HEADER]).
Пример команды IMAP:
TAG0001 FETCH 1 BODY.PEEK[HEADER.FIELDS (CONTENT-TYPE)]
Пример ответа сервера IMAP:
* 1 FETCH (BODY[HEADER.FIELDS (CONTENT-TYPE)] {69}...data..})
TAG0001 OK Success
Содержимое "... data ..." является заголовком типа содержимого:
Content-Type: text/calendar;
name="meeting.ics";
method=REQUEST
- Если невозможно определить, является ли элемент календарным, заголовок Content-Type сообщения, потому что это общий тип, такой как multipart / что-то, используйте команду FETCH, чтобы получить структуру сообщения и найти в дереве MIME любые элементы календаря с соответствующим Content-type.
Пример команды IMAP:
TAG0002 FETCH 2 (BODY)
Пример ответа сервера IMAP:
* 1 FETCH (
BODY
(
(
("text" "plain" ("charset" "iso-8859-2") NIL NIL "quoted-printable" 194 1)
("text" "html" ("charset" "iso-8859-2") NIL NIL "quoted-printable" 1173 1)
("text" "calendar"
("name" "meeting.ics" "charset" "windows-1252" "method" "REQUEST") NIL NIL "8bit" 1531 1)
"alternative"
)
"mixed"
)
)
TAG0002 OK FETCH completed.
(добавлено много пробелов для лучшей читаемости)
Ознакомьтесь с разделами 6.4.5 и 7.4.2 в RFC 3501 для получения дополнительной информации о команде FETCH и ее формате ответа. К сожалению, я не знаю, как этого добиться с помощью javamail.