Как обнаружить IMAPMessage - это не электронная почта, а задача или элемент календаря - PullRequest
1 голос
/ 15 марта 2010

Я обращаюсь к Lotus и Groupwise, используя javamail через IMAP, рекурсивно получаю доступ ко всем папкам и обрабатываю электронную почту, которую нахожу. Но в таких папках, как Tasklist и Calendar (они принадлежат Groupwise, но я думаю, что я помню, у Lotus были похожие вещи), я получаю элементы как экземпляры IMAPMessage, и поэтому они обрабатываются так, как если бы они были почтой.

Я понимаю, что эти элементы отображаются в виде почты по протоколу IMAP (либо по проекту, либо по ошибке), но я хочу обрабатывать только правильную почту. Есть ли способ сделать это? Пока я отклонил следующие подходы:

  • Убедитесь, что в сообщении есть идентификатор сообщения, по крайней мере, в элементах Groupwise Calendar.
  • Игнорировать папки по имени (например, Календарь и Список задач): не совсем правильно, так как пользователь может перемещать почту внутри этих папок.

Что я смотрю, так это какой-то вызов API IMAP, который я пропустил до сих пор, или что-то в этих строках ...

1 Ответ

2 голосов
/ 19 марта 2010

Я не знаком с 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...