Process и ProcessHeader

Aug 8, 2013 at 7:40 PM
Здравствуйте, как я понимаю, Process считывает информацию о всем сообщении. Но скачивать по очереди все сообщения, слишком долго, можно как-нибудь получать только Тему и адресс? И в чем разница Process от ProcessHeader?
Coordinator
Aug 8, 2013 at 8:29 PM
Edited Aug 8, 2013 at 8:31 PM
Добрый вечер,

есть три основных метода для загрузки информации о письмах: ProcessFlags, ProcessHeader и Process.
  • Метод Process используется для полной загрузки письма со всеми заголовками и частями (тело письма, прикрепленные файлы). Этот метод вызывается автоматически если при поиске писем через Folder.Search второй параметр установить на true.
  • Метод ProcessHeader, никогда не вызывается автоматически, но позволяет запросить только заголовки письма (тему, от кого, кому итд.).
  • Метод ProcessFlags, вызывается в Process, и запрашивает флаги письма, например для определения прочитано письмо, или нет.
По сути Вам нужен именно метод ProcessHeader. Запрос писем будет выглядеть примерно так:
var _messages = _folder.Search("All", false); // makeProcess: false, метод Process не будет вызван автоматически.
foreach (var msg in _messages)
{
         msg.ProcessFlags(); // Запрос флагов, например для определения прочитано сообщение или нет.
         msg.ProcessHeader(); // Запрос заголовков, получение темы, отправителя, итд.
}
Вообще в скором времени я планирую сделать новый релиз библиотеки, и все эти методы будут удалены, так как в них не будет никакой необходимости. Объем загружаемой информации можно будет указать значительно проще, не нужно будет обрабатывать письма как говориться "руками". Если Вы заглядывали в репозиторий, то видели, что за последнее время было довольно много обновлений.

К релизу я подготовлю инструкцию по миграции и базовую документацию, так как ее явно нехватает.

С уважением,

Павел
Aug 8, 2013 at 9:12 PM
Спасибо, я так и думал, но что-то загрузка с гмэйла не ускорилась) надеюсь, это обновление не ограничит возможности программы
Coordinator
Aug 9, 2013 at 10:46 AM
Скорость загрузки должна быть выше. Проверьте установлен ли второй аргумент при вызове Folder.Search на false.

С новым релизом возможности программы не будут ограничены, а наоборот расширятся, да и использование станет более интуитивным.
Aug 9, 2013 at 11:14 AM
Я не использую Folder.Search. Я записывают в начале все папки и привязывают их номера к кнопкам, ну а потом загружаю по иду (Folder[fid].Messages[lastMessage-idx], к примеру. но даже загрузка 30 заголовков на инете в 50 мбит/с занимает около 20-30 секунд.
Aug 9, 2013 at 5:08 PM
GetDecodedBody(out b) не хочет декодировать сообщение. И выводит кодированное сообщение с лишней информацией. Есть какой-нибудь фикс для этого?
Coordinator
Aug 10, 2013 at 9:07 AM
Для GetDecodedBody нужно смотреть индивидуально, мне нужен оригинал письма которое идет на обработку. Скачайте тестовое приложение. Там в контекстном меню сообщений есть экспорт в текстовый файл. Этот текстовый файл нужно скинуть мне на p13a92@googlemail.com.
Aug 17, 2013 at 5:14 AM
а библиотека поддерживает чтение сообщений в двух разных потоках? если да, то можно увидеть пример? потому что, когда я читаю разные сообщения в разных потоках, у меня читает не полное тело сообщения
Coordinator
Aug 17, 2013 at 8:04 AM
На данном этапе загрузка писем возможна лишь в один поток.
Aug 17, 2013 at 5:22 PM
Очень большой минус. С такой скоростью загрузки с гмайла нелогично все делать в один поток
Coordinator
Aug 17, 2013 at 5:27 PM
Edited Aug 17, 2013 at 5:52 PM
Не спорю, но библиотека развивается, так что в будущем можно добавить многопоточность.
Если у Вас уже сейчас есть конкретные предложения по реализации, буду рад выслушать. Проект вообще-то открытый и никто не запрещает Вам участвовать в его развитии.

UPDATE: Согласно IMAP4 Implementation Recommendations:
you must avoid making multiple connections to the same mailbox in your own client
Многопоточность не рекомендуется. Чтобы скорость загрузки была выше, нужно объединять запросы + дать возможность частиной загрузки. Все это буду уже в следующей версии, наберитесь терпения.
Aug 17, 2013 at 10:00 PM
Я говорил про многопоточность клиента, а не библиотеки) если будет объединение, что же, будет здорово
Aug 23, 2013 at 2:31 AM
ProcessHeader отмечает письмо как прочитанное. Но почему? Это баг? Я ведь хочу получить только название и заголовки, чтобы выбрать, какие читать
Aug 23, 2013 at 2:36 AM
This seems to be a regression from the April release which didn't mark ProcessHeader() messages as read.
Aug 23, 2013 at 3:17 AM
I used nuget for install. when do you plan to release the next update?
Coordinator
Aug 23, 2013 at 6:59 PM
Hi BorgGrown and ravib,

ProcessHeader has always marked the messages as read, because it is doing a fetch of BODY[HEADER], which automatically marks the message as read.
I can change this behavior without problems.

The next update is coming within the next two weeks.
Aug 23, 2013 at 7:16 PM
Thanks, Pavel.

It would be great if ProcessHeader() was able to retrieve:
  • message size (total is fine)
  • number and size of attachments
and not mark the message as read.

Thanks,

--Ravi
Coordinator
Aug 23, 2013 at 7:34 PM
The method ProcessHeader will be removed completely, and the data you mentioned will be requested automatically.