ЗагрузитьСообщения (БСП)

Автор: 1С
ОбщийМодуль.РаботаСПочтовымиСообщениямиСлужебный
БСП

Загрузить сообщения.

Функция ЗагрузитьСообщения(Знач УчетнаяЗапись, Знач ПараметрыЗагрузки = Неопределено) Экспорт
	
	// Используется для проверки возможности входа на почтовый ящик.
	Перем РежимТестирования;
	
	// Получать только заголовки писем.
	Перем ПолучениеЗаголовков;
	
	// Приводить почтовые сообщения к простому типу;
	Перем ПриводитьСообщенияКТипу;
	
	// Заголовки или идентификаторы писем, полные сообщения по которым требуется получить.
	Перем ЗаголовкиИдентификаторы;
	
	Если ПараметрыЗагрузки.Свойство("РежимТестирования") Тогда
		РежимТестирования = ПараметрыЗагрузки.РежимТестирования;
	Иначе
		РежимТестирования = Ложь;
	КонецЕсли;
	
	Если ПараметрыЗагрузки.Свойство("ПолучениеЗаголовков") Тогда
		ПолучениеЗаголовков = ПараметрыЗагрузки.ПолучениеЗаголовков;
	Иначе
		ПолучениеЗаголовков = Ложь;
	КонецЕсли;
	
	УстановитьОтключениеБезопасногоРежима(Истина);
	Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина);
	УстановитьОтключениеБезопасногоРежима(Ложь);
	
	Если ПараметрыЗагрузки.Свойство("ЗаголовкиИдентификаторы") Тогда
		ЗаголовкиИдентификаторы = ПараметрыЗагрузки.ЗаголовкиИдентификаторы;
	Иначе
		ЗаголовкиИдентификаторы = Новый Массив;
	КонецЕсли;
	
	НаборСообщенийДляУдаления = Новый Массив;
	
	Протокол = ПротоколИнтернетПочты.POP3;
	Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда
		Протокол = ПротоколИнтернетПочты.IMAP;
	КонецЕсли;
	
	УстановитьОтключениеБезопасногоРежима(Истина);
	Соединение = Новый ИнтернетПочта;
	Соединение.Подключиться(Профиль, Протокол);
	Попытка
		Если ПолучениеЗаголовков Тогда
			НаборПисем = Соединение.ПолучитьЗаголовки();
		ИначеЕсли Не РежимТестирования Тогда
			НастройкиТранспорта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты,ОставлятьКопииСообщенийНаСервере,ПериодХраненияСообщенийНаСервере");
			Если НастройкиТранспорта.ПротоколВходящейПочты = "IMAP" Тогда
				НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере = Истина;
				НастройкиТранспорта.ПериодХраненияСообщенийНаСервере = 0;
			КонецЕсли;
			
			Если НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере Тогда
				Если ЗаголовкиИдентификаторы.Количество() = 0 И НастройкиТранспорта.ПериодХраненияСообщенийНаСервере > 0 Тогда
					Заголовки = Соединение.ПолучитьЗаголовки();
					НаборСообщенийДляУдаления = Новый Массив;
					Для Каждого ЭлементЗаголовок Из Заголовки Цикл
						ТекущаяДата = ТекущаяДатаСеанса();
						РазницаДат = (ТекущаяДата - ЭлементЗаголовок.ДатаОтправления) / (3600*24);
						Если РазницаДат >= НастройкиТранспорта.ПериодХраненияСообщенийНаСервере Тогда
							НаборСообщенийДляУдаления.Добавить(ЭлементЗаголовок);
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
				АвтоматическиУдалятьСообщенияПриВыбореССервера = Ложь;
			Иначе
				АвтоматическиУдалятьСообщенияПриВыбореССервера = Истина;
			КонецЕсли;
			
			НаборПисем = Соединение.Выбрать(АвтоматическиУдалятьСообщенияПриВыбореССервера, ЗаголовкиИдентификаторы);
			
			Если НаборСообщенийДляУдаления.Количество() > 0 Тогда
				Соединение.УдалитьСообщения(НаборСообщенийДляУдаления);
			КонецЕсли;
		КонецЕсли;
	
		Соединение.Отключиться();
	Исключение
		Попытка
			Соединение.Отключиться();
		Исключение
			// Обработка и журналирование исключения не требуется, т.к. 
			// в вызывающий код передается исходное исключение, которое будет там обработано.
		КонецПопытки;
		ВызватьИсключение;
	КонецПопытки;
	УстановитьОтключениеБезопасногоРежима(Ложь);
	
	Если РежимТестирования Тогда
		Возврат Истина;
	КонецЕсли;
	
	Если ПараметрыЗагрузки.Свойство("ПриводитьСообщенияКТипу") Тогда
		ПриводитьСообщенияКТипу = ПараметрыЗагрузки.ПриводитьСообщенияКТипу;
	Иначе
		ПриводитьСообщенияКТипу = Истина;
	КонецЕсли;
	
	НаборСообщений = НаборПисем;
	Если ПриводитьСообщенияКТипу Тогда
		Если ПараметрыЗагрузки.Свойство("Колонки") Тогда
			НаборСообщений = АдаптированныйНаборПисем(НаборПисем, ПараметрыЗагрузки.Колонки);
		Иначе
			НаборСообщений = АдаптированныйНаборПисем(НаборПисем);
		КонецЕсли;
	КонецЕсли;
	
	Возврат НаборСообщений;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗагрузитьСообщениеОбмена (БСП)

ЗагрузитьСообщение (БСП)

ЗагрузитьСообщениеОбменаДанными (БСП)

ЗагрузитьПочтовыеСообщения (БСП)

СообщениеЗагрузитьСообщениеОбмена (БСП)

Загрузить (БСП)

TurboConf 6 - расширение Конфигуратора 1С