Команда извлечения вложений из IMAP - PullRequest
9 голосов
/ 20 января 2011

Я работаю в почтовом клиенте, использующем IMAP, и ищу команду для получения вложений в сообщение.

Ответы [ 3 ]

24 голосов
/ 20 января 2011

Вся информация о сообщении извлекается с помощью команды FETCH .Однако у вас есть два варианта его использования.

Во-первых, вы можете дословно получить все сообщения электронной почты.В этом случае вам нужно будет включить синтаксический анализатор MIME в своем клиенте, чтобы выяснить структуру сообщения.(У каждой платформы есть по крайней мере один или два популярных парсера MIME; так как ты не сказал нам, что кодируешь, я не могу рекомендовать один для тебя.) Как только ты получишь структуру сообщения из парсера MIME, ты 'Потребуется некоторая клиентская логика, чтобы определить, какие части являются вложениями.Чтобы начать, стоит посмотреть RFC 2183 .Как правило, части с Content-Disposition, начинающимися с "attachment", будут вложениями, но все авторы почтовых клиентов проходят фазу проб и ошибок, чтобы сделать это правильно.Чтобы загрузить все сообщение электронной почты, вы должны выполнить команду IMAP

$ UID FETCH <uid> BODY.PEEK[]

Во-вторых, вы можете настроить IMAP-сервер для анализа структуры сообщения, выдав FETCH BODYSTRUCTURE (примечание: без квадрата).скобки).Вам придется проанализировать возвращенные данные BODYSTRUCTURE самостоятельно;IMAP RFC объясняет формат и дает несколько примеров.

# message, no attachments:
("TEXT" "PLAIN" ("CHARSET" "ISO-8859-1" "FORMAT" "flowed") NIL NIL "7BIT" 1469 50 NIL NIL NIL NIL)

# message, one attachment
(("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "QUOTED-PRINTABLE" 56 1 NIL NIL NIL NIL)("AUDIO" "X-WAV" ("NAME" "voicemail.wav") NIL NIL "BASE64" 152364 NIL ("attachment" ("FILENAME" "voicemail.wav")) NIL NIL) "MIXED" ("BOUNDARY" "----_=_NextPart_001_01C4ACB3.5AA7B8E2") NIL NIL NIL)

После того, как вы определили, какие части вас интересуют, вы можете ввести FETCH для отображаемоготело сообщения.Затем ваш клиент может просто перечислить вложения сообщений (проанализированные из ответа BODY), а затем вернуться и FETCH их, если пользователь нажмет на них.Таким образом, команды IMAP, которые вы будете выдавать, будут выглядеть следующим образом:

$ UID FETCH <uid> (BODY ENVELOPE)   # get structure and header info
$ UID FETCH <uid> (BODY[1])         # retrieving displayable body
$ UID FETCH <uid> (BODY[2])         # retrieving attachment on demand
1 голос
/ 20 января 2011

Я считаю, что вы ищете команду IMAP v4 FETCH .

0 голосов
/ 10 августа 2013

Вы можете использовать файловый ресурс Context.IO для быстрого и простого извлечения вложений.

http://context.io/docs/2.0/accounts/files#get

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