Прием почты из 1С

Предисловие

Все описанное ниже предполагает использование стандартной библиотеки v7plus.dll, входящей в комплект поставки 1С:Предприятия 7.7.

В модуле, который будет принимать почту, вне функций должна быть определена переменная "Почта", в которой будет храниться ссылка на объект "V7Mail".

Письмо загружается из почтовой программы, определенной в системе используемой по умолчанию. Нижеприведенные тексты проверялись с программами: Microsoft Outlook Express (5, 6), Microsoft Outlook 2000.

Назначение

Чтение почты непосредственно из 1С необходимо в разных ситуациях. Например, можно организовать получение заказов или отчетов почтой одновременно с их обработкой и загрузкой в информационную базу. Или можно создать своего почтового клиента, встроенного в 1С для уменьшения числа программ, используемых пользователями.

Инициализация

Перед использованием почты необходимо загрузить внешнюю компоненту. Это делает следующая процедура.

Функция Инит()	
	Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"v7plus.dll")=0 Тогда
		Если ЗагрузитьВнешнююКомпоненту("v7plus.dll")=0 Тогда
			Сообщить("Не удалось обнаружить компоненту V7Plus.dll!"); 
			Возврат 0;
		КонецЕсли;
	КонецЕсли;
	Попытка
		Почта = СоздатьОбъект("AddIn.V7Mail");
	Исключение 
		Сообщить("Не удалось создать объект Addin.V7Mail!");
		Возврат 0;
	КонецПопытки;
	Возврат 1;
КонецФункции

Чтение

В этом примере реализован прием почты, поиск заказов от клиентов, которые распознаются по ключевому слову "заказ" в теме письма, сохранение приколотых файлов с заказами и их дальнейшая обработка в функции "Загрузить".

Процедура ПрочитатьПочту()
	Если Инит()=0 тогда
		Возврат;
	КонецЕсли;
	Почта.Подключиться();
	Почта.ВыбратьСообщения();
	Пока Почта.ПолучитьСообщение()=1 Цикл
		Если Лев(НРег(Почта.Заголовок),5)="заказ" Тогда
			//потенциально нужный нам файл
			Сообщить("Обнаружен заказ от "+Почта.АдресОтправителя());
			Почта.ПрочитатьСообщение();
			Имя=""; Кат="";
			Пока Почта.ПолучитьФайл(Имя,Кат)=1 Цикл
				ИмяФайла=Кат+Имя;
				Загрузить(ИмяФайла);
				Имя=""; Кат="";
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	Почта.Отключиться();
	Почта=0;
КонецПроцедуры