1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-25 21:28:57 +02:00

#84 доработки по работе с протоколом IMAP

This commit is contained in:
Anton Ivanov 2018-07-25 17:50:21 +03:00
parent 174eba17b5
commit 2c6e4964c5

View File

@ -571,9 +571,10 @@
// +++ #84 79Vlad 13.04.2018
//Идентификаторы = Почта.ПолучитьИдентификаторы();
ЭтоПротоколIMAP = Протокол = ПротоколИнтернетПочты.IMAP;
// Так как протокол IMAP поддерживает отборы и есть вероятность повторного получения письма, но с другим идентификатором!?
// передадим в параметрах отбора, что получать только не прочтенные письма
Если Протокол = ПротоколИнтернетПочты.IMAP Тогда
Если ЭтоПротоколIMAP Тогда
//Явно укажем из какой папки получать письма
пПапкаВходящейПочтыIMAP = ДанныеУчетнойЗаписи.Ссылка.узПапкаВходящейПочтыIMAP;
@ -586,7 +587,7 @@
Иначе
Идентификаторы = Почта.ПолучитьИдентификаторы();
КонецЕсли;
ИсключатьДублиПисем = ДанныеУчетнойЗаписи.Ссылка.узИсключатьДублиПисем;
узИсключатьДублиПисем = ДанныеУчетнойЗаписи.Ссылка.узИсключатьДублиПисем;
// --- #84 79Vlad 13.04.2018
Если Идентификаторы.Количество() = 0 И (Не ДанныеУчетнойЗаписи.ОставлятьКопии) Тогда
@ -601,10 +602,16 @@
// -----------------------------------------------------------------
// Определим какие сообщения нужно получать.
// +++ #84 79Vlad 13.04.2018
// +++ Григорьев 01.06.2018
//ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, ДанныеУчетнойЗаписи.Ссылка);
ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, ДанныеУчетнойЗаписи.Ссылка,ИсключатьДублиПисем);
Если ЭтоПротоколIMAP Тогда
ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, ДанныеУчетнойЗаписи.Ссылка,узИсключатьДублиПисем);
Иначе
ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, ДанныеУчетнойЗаписи.Ссылка);
КонецЕсли;
// --- Григорьев 01.06.2018
// --- #84 79Vlad 13.04.2018
Получено = 0;
@ -624,21 +631,25 @@
// +++ #84 79Vlad 01.06.2018
//МассивИдентификаторовПорцииДляЗагрузки.Добавить(ИдЗагружать.Получить(Инд));
Если ИсключатьДублиПисем Тогда
ИскомыйСерверныйИдентификатор = ИдЗагружать.Получить(Инд);
Для каждого Стр Из Идентификаторы Цикл
Если Стр.ИдентификаторСообщения = ИскомыйСерверныйИдентификатор Тогда
Если Стр.Идентификатор.Количество() <> 0 Тогда
Идент = Стр.Идентификатор[0];
Иначе
Продолжить;
КонецЕсли;
МассивИдентификаторовПорцииДляЗагрузки.Добавить(Идент);
КонецЕсли;
КонецЦикла;
Если ЭтоПротоколIMAP Тогда
Если узИсключатьДублиПисем Тогда
ИскомыйСерверныйИдентификатор = ИдЗагружать.Получить(Инд);
Для каждого Стр Из Идентификаторы Цикл
Если Стр.ИдентификаторСообщения = ИскомыйСерверныйИдентификатор Тогда
Если Стр.Идентификатор.Количество() <> 0 Тогда
Идент = Стр.Идентификатор[0];
Иначе
Продолжить;
КонецЕсли;
МассивИдентификаторовПорцииДляЗагрузки.Добавить(Идент);
КонецЕсли;
КонецЦикла;
Иначе
МассивИдентификаторовПорцииДляЗагрузки.Добавить(ИдЗагружать.Получить(Инд));
КонецЕсли;
Иначе
МассивИдентификаторовПорцииДляЗагрузки.Добавить(ИдЗагружать.Получить(Инд));
КонецЕсли;
Конецесли;
// --- #84 79Vlad 01.06.2018
@ -655,25 +666,24 @@
// +++ #84 79Vlad 13.04.2018
//Сообщения = Почта.Выбрать(Ложь, МассивИдентификаторовПорцииДляЗагрузки);
//Отметим загруженные сообщения как "Прочитанные"
Попытка
Сообщения = Почта.Выбрать(Ложь, МассивИдентификаторовПорцииДляЗагрузки, Истина);
Исключение
Почта.Отключиться();
СнятьБлокировкуУчетнойЗаписиДляПолучения(ДанныеУчетнойЗаписи.Ссылка);
Возврат;
КонецПопытки;
Если ЭтоПротоколIMAP Тогда
//Отметим загруженные сообщения как "Прочитанные"
Попытка
Сообщения = Почта.Выбрать(Ложь, МассивИдентификаторовПорцииДляЗагрузки, Истина);
Исключение
Почта.Отключиться();
СнятьБлокировкуУчетнойЗаписиДляПолучения(ДанныеУчетнойЗаписи.Ссылка);
Возврат;
КонецПопытки;
Иначе
Сообщения = Почта.Выбрать(Ложь, МассивИдентификаторовПорцииДляЗагрузки);
Конецесли;
// --- #84 79Vlad 13.04.2018
// Запишем их
Для Каждого Сообщение Из Сообщения Цикл
//// +++ #84 79Vlad 13.04.2018
//Если МасРанееЗагруженных.Найти(Сообщение.ИдентификаторСообщения) <> Неопределено Тогда
// Продолжить;
//КонецЕсли;
//// --- #84 79Vlad 13.04.2018
ДобавлятьВМассивСозданныхПисем = ЛОЖЬ;
Попытка
@ -724,10 +734,11 @@
// Удалим ненужные сообщения на сервере.
// +++ #84 79Vlad 13.04.2018
ЭтоПротоколIMAP = Протокол = ПротоколИнтернетПочты.IMAP;
//Так как оба протокола поддерживают удаление - то не будем им запрещать это
//Если Протокол = ПротоколИнтернетПочты.POP3 Тогда
Если Протокол = ПротоколИнтернетПочты.POP3
ИЛИ Протокол = ПротоколИнтернетПочты.IMAP Тогда
ИЛИ ЭтоПротоколIMAP Тогда
// --- #84 79Vlad 13.04.2018
@ -750,9 +761,11 @@
Если МассивКУдалению.Количество() <> 0 Тогда
Почта.УдалитьСообщения(МассивКУдалению);
// +++ #84 79Vlad 13.04.2018
Почта.ОчиститьУдаленныеСообщения();
//Также очистим историю загрузки по этим письмам
УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению);
Если ЭтоПротоколIMAP Тогда
Почта.ОчиститьУдаленныеСообщения();
//Также очистим историю загрузки по этим письмам
УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению);
Конецесли;
// --- #84 79Vlad 13.04.2018
КонецЕсли;
@ -760,11 +773,15 @@
// Удалим ненужные идентификаторы в регистре сведений.
// +++ #84 79Vlad 13.04.2018
// Если очищать регистр сведений - то письма будут повторно загружены
//Если УдалятьВсе Тогда
// УдалитьИдентификаторыВсехРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка);
//Иначе
// УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению);
//КонецЕсли;
Если НЕ ЭтоПротоколIMAP Тогда
// --- #84 79Vlad 13.04.2018
Если УдалятьВсе Тогда
УдалитьИдентификаторыВсехРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка);
Иначе
УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению);
КонецЕсли;
// +++ #84 79Vlad 13.04.2018
Конецесли;
// --- #84 79Vlad 13.04.2018
КонецЕсли;
@ -876,12 +893,15 @@
КонецФункции
Функция ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись,ИсключатьДублиПисем = Ложь)
//+ #84 Иванов А.Б. 2018-07-23
//Функция ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись)
Функция ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись,узИсключатьДублиПисем = Ложь)
//- #84 Иванов А.Б. 2018-07-23
// Получим список сообщений которые не были раньше получены.
//+ #84 Иванов А.Б. 2018-07-23
//ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(Идентификаторы);
ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(Идентификаторы,ИсключатьДублиПисем);
ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(Идентификаторы,узИсключатьДублиПисем);
//- #84 Иванов А.Б. 2018-07-23
Запрос = Новый Запрос;
@ -1065,11 +1085,16 @@
ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись,
Письмо.ИдентификаторНаСервере,
Сообщение.ДатаПолучения);
// +++ #84 79Vlad 13.04.2018
ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись,
Письмо.ИдентификаторСообщения,
Сообщение.ДатаПолучения);
ЭтоПротоколIMAP = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP";
Если ЭтоПротоколIMAP Тогда
ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись,
Письмо.ИдентификаторСообщения,
Сообщение.ДатаПолучения);
КонецЕсли;
// --- #84 79Vlad 13.04.2018
Если Письмо.УведомитьОПрочтении Тогда
ЗаписатьНеобходимостьОбработкиУведомленияОПрочтении(Письмо.Ссылка);
КонецЕсли;