|
Обработка разбора вложений из почты. Не подскажете где найти? | ☑ | ||
---|---|---|---|---|
0
Кокос
03.06.13
✎
11:52
|
Вроде видел в типовой УТ11 пару лет назад, а теперь найти не могу. Тупой перебор почты на наличие файлов и их сохранение для разбора.
|
|||
1
Vladal
03.06.13
✎
12:35
|
(0) Навскидку - УПП, УТ, УТП..
В самописке я писал так: Процедура ПрочитатьСообщениеСИзменениями() Экспорт РасширениеZIP = ".zip"; РасширениеXML = ".xml"; // Имя временного файла Каталог = КаталогВременныхФайлов() + Константы.КодБД.Получить(); СоздатьКаталог(Каталог); ПутьФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\"); ИмяФайла = "Discounts_" + СокрЛП(Ссылка.Код) + "_" + СокрП(ПланыОбмена.Филиалы.ЭтотУзел().Код); // Читаем почту и загружаем файл ПрофильПочты = Новый ИнтернетПочтовыйПрофиль; ПрофильПочты.АдресСервераPOP3 = Константы.ПочтаАдресСервераPOP3.Получить(); ПрофильПочты.ПортSMTP = Константы.ПочтаПортSMTP.Получить(); ПрофильПочты.ПользовательSMTP = Константы.ПочтаПользовательSMTP.Получить(); ПрофильПочты.ПарольSMTP = Константы.ПочтаПарольSMTP.Получить(); ПрофильПочты.АдресСервераSMTP = Константы.ПочтаАдресСервераSMTP.Получить(); ПрофильПочты.ПортPOP3 = Константы.ПочтаПортPOP3.Получить(); ПрофильПочты.Пользователь = Константы.ПочтаПользователь.Получить(); ПрофильПочты.Пароль = Константы.ПочтаПароль.Получить(); ПрофильПочты.ВремяОжидания = Константы.ПочтаВремяОжидания.Получить(); Почта = Новый ИнтернетПочта; Попытка Почта.Подключиться(ПрофильПочты); Исключение //Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка Заголовки = Почта.ПолучитьЗаголовки(); Исключение //Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; //Если Заголовки.Количество() = 0 Тогда // //ОбщегоНазначения.СообщитьИнформацию("В почтовом ящике нет входящих сообщений!"); // Возврат; //КонецЕсли; // Загрузка сообщений в массив, сначала только загрузка, после импорта удалим Сообщения = Почта.Выбрать(Ложь, Заголовки); // Ложь чтобы оставались письма в ящике КоличествоПисем = Сообщения.Количество()-1; Для Индекс = 0 По КоличествоПисем Цикл Сообщение = Сообщения[Индекс]; // ВЛ - 2012-06-10 - Переделал, чтобы обработанные письма удалялись из ящика. //// Пропустим только почту за последние 3 дня //ГлубинаПроверки = Константы.ПочтаГлубинаПроверки.Получить(); //Если НачалоДня(ТекущаяДата()) - НачалоДня(Сообщение.ДатаОтправления) > ГлубинаПроверки * 60*60*24 Тогда // Продолжить; //КонецЕсли; // Отсев ненужных писем по теме сообщения Если Сообщение.Тема <> ИмяФайла + РасширениеXML Тогда Продолжить; КонецЕсли; // Читаем вложения каждого письма и сверяем с ожидаемым именем для этого узла обмена Для каждого Вложение Из Сообщение.Вложения Цикл Если Вложение.ИмяФайла <> ИмяФайла + РасширениеZIP Тогда Продолжить; КонецЕсли; ИмяФайлаВложения = ПутьФайла + ИмяФайла + РасширениеZIP; ДанныеОбмена = Вложение.Данные; ДанныеОбмена.Записать(ИмяФайлаВложения); // Распакуем выгруженный ZIP-архив ФайлАрхива = Новый ЧтениеZIPФайла(ИмяФайлаВложения, "Discounts"); ФайлАрхива.ИзвлечьВсе(ПутьФайла, РежимВосстановленияПутейФайловZIP.Восстанавливать); ФайлАрхива.Закрыть(); // Работаем с полученным файлом обмена ИмяФайлаОбмена = ПутьФайла + ИмяФайла + РасширениеXML; Файл = Новый Файл(ИмяФайлаОбмена); Если НЕ Файл.Существует() Тогда Возврат; КонецЕсли; // Чтение документов XML ЧтениеХМЛ = Новый ЧтениеXML; Попытка ЧтениеХМЛ.ОткрытьФайл(ИмяФайлаОбмена); Исключение ОбщегоНазначения.СообщитьОбОшибке("" + ТекущаяДата() + " -- " + ОписаниеОшибки()); Продолжить; КонецПопытки; // Чтение файла ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); Попытка ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ); Исключение ТекстОшибки = "" + ТекущаяДата() + " -- " + ОписаниеОшибки(); ОбщегоНазначения.СообщитьОбОшибке(ТекстОшибки); // Проверка текста ошибки Если Найти(ТекстОшибки, "Номер сообщения меньше или равен номеру ранее принятого сообщения") > 0 Тогда // Это сообщение загрузили раньше, но по какой-то причине не удалили УдалитьСообщение(Почта, Сообщения, Индекс); // Закрытие объектов ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеХМЛ.Закрыть(); УдалитьФайлы(ИмяФайлаОбмена); УдалитьФайлы(ИмяФайлаВложения); Продолжить; //Иначе // Возврат; КонецЕсли; КонецПопытки; // Сообщение не предназначено для этого узла Если ЧтениеСообщения.Отправитель <> Ссылка Тогда ВызватьИсключение "Неверный узел"; КонецЕсли; // Читаем данные из сообщения ХМЛ сериализации Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл // Удаляем регистрацию изменений для узла отправителя сообщения ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); Данные = ПрочитатьXML(ЧтениеХМЛ); // Записать полученные данные Попытка Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; Данные.ОбменДанными.Загрузка = Истина; Данные.Записать(); Исключение ОбщегоНазначения.СообщитьОбОшибке("" + ТекущаяДата() + " -- " + ОписаниеОшибки()); Возврат; КонецПопытки; КонецЦикла; // Закрытие объектов ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеХМЛ.Закрыть(); УдалитьФайлы(ИмяФайлаОбмена); УдалитьФайлы(ИмяФайлаВложения); УдалитьСообщение(Почта, Сообщения, Индекс); КонецЦикла; // Чтение почтовых вложений КонецЦикла; // Чтение почтовых сообщений Почта.Отключиться(); // todo: будет ли читаться СМТП после отключения ПОП3? КонецПроцедуры |
|||
2
Vladal
03.06.13
✎
12:36
|
Упс... При копипасте добавились пустые строки.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |