1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-19 21:07:53 +02:00

@etnety #165 Ошибка обработки вложений во входящих письмах

This commit is contained in:
Anton Ivanov 2019-05-15 08:39:50 +03:00
parent b4f0aa787b
commit a3b1aeff3e
2 changed files with 144 additions and 9 deletions

View File

@ -1597,19 +1597,39 @@
Процедура ЗаписатьВложениеЭлектронногоПисьма(Объект, Вложение,МассивПодписей,КоличествоПустыхИменВоВложениях)
ПисьмоСсылка = Объект.Ссылка;
Размер = 0;
// + #165 Александр { [13.05.2019]
//Размер = 0;
//Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда
// Размер = Вложение.Данные.Размер();
//Иначе
// // А может быть и тип ИнтернетПочтовоеСообщение. На данный момент не поддерживаем.
// Если ТипЗнч(Вложение.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда
// НовоеУдаленноеВложение = Объект.НепринятыеВложения.Добавить();
// НовоеУдаленноеВложение.ИмяВложение = Вложение.Данные.Тема + " " + НСтр("ru = 'от'") + " " +Вложение.Данные.ДатаОтправления;
// КонецЕсли;
// Возврат;
//КонецЕсли;
//
//Адрес = ПоместитьВоВременноеХранилище(Вложение.Данные, "");
Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда
Размер = Вложение.Данные.Размер();
ДанныеВложения = Вложение.Данные;
ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Вложение.ИмяФайла, "");
ЭтоВложениеПисьмо = узФайлЯвляетсяЭлектроннымПисьмом(ИмяФайла, ДанныеВложения);
Иначе
// А может быть и тип ИнтернетПочтовоеСообщение. На данный момент не поддерживаем.
Если ТипЗнч(Вложение.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда
НовоеУдаленноеВложение = Объект.НепринятыеВложения.Добавить();
НовоеУдаленноеВложение.ИмяВложение = Вложение.Данные.Тема + " " + НСтр("ru = 'от'") + " " +Вложение.Данные.ДатаОтправления;
КонецЕсли;
Возврат;
ДанныеВложения = Вложение.Данные.ПолучитьИсходныеДанные();
ИмяФайла = узПредставлениеПисьма(Вложение.Данные.Тема, Вложение.Данные.ДатаПолучения) + ".eml";
ЭтоВложениеПисьмо = Истина;
КонецЕсли;
Адрес = ПоместитьВоВременноеХранилище(Вложение.Данные, "");
Размер = ДанныеВложения.Размер();
Адрес = ПоместитьВоВременноеХранилище(ДанныеВложения, "");
// - #165 } +++ [13.05.2019]
ВложениеПисьмаСсылка = ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
ПисьмоСсылка, Адрес, Вложение.ИмяФайла, Размер,КоличествоПустыхИменВоВложениях);
@ -2219,3 +2239,112 @@
КонецПроцедуры
#КонецОбласти
// + #165 Александр { [13.05.2019]
#Область ЗаписьВложений
Функция узФайлЯвляетсяЭлектроннымПисьмом(ИмяФайла, ДвоичныеДанные) Экспорт
Если узЭтоФайлПисьмо(ИмяФайла)
И узДвоичныеДанныеКорректноеИнтернетПочтовоеСообщение(ДвоичныеДанные) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
// Проверяет, являются ли двоичные данные при десериализации ИнтернетПочтовоеСообщение.
//
// Параметры:
// ДвоичныеДанные - ДвоичныеДанные - проверяемые двоичные данные.
//
// Возвращаемое значение:
// Булево - Истина, если двоичные данные корректно десериализуются в объект ИнтернетПочтовоеСообщение.
//
Функция узДвоичныеДанныеКорректноеИнтернетПочтовоеСообщение(ДвоичныеДанные)
ПочтовоеСообщение = узИнтернетПочтовоеСообщениеИзДвоичныхДанных(ДвоичныеДанные);
Возврат ПочтовоеСообщение.СтатусРазбора = СтатусРазбораИнтернетПочтовогоСообщения.ОшибокНеОбнаружено;
КонецФункции
Функция узИнтернетПочтовоеСообщениеИзДвоичныхДанных(ДвоичныеДанные)
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.УстановитьИсходныеДанные(ДвоичныеДанные);
Возврат ПочтовоеСообщение;
КонецФункции
Функция узПредставлениеПисьма(ТемаПисьма, ДатаПисьма) Экспорт
ШаблонПредставления = НСтр("ru = '%1 от %2'");
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
узТемаВзаимодействия(ТемаПисьма),
Формат(ДатаПисьма, "ДЛФ=D"));
КонецФункции
Функция узТемаВзаимодействия(Тема)
Возврат ?(ПустаяСтрока(Тема), НСтр("ru = '<Без темы>'"), Тема);
КонецФункции
// Проверяет, является ли файл письмом по расширению файла.
//
// Параметры:
// ИмяФайла - Строка - имя проверяемого файла.
//
// Возвращаемое значение:
// Булево - Истина, если расширение файла, указывает на то, что он является письмом.
//
Функция узЭтоФайлПисьмо(ИмяФайла) Экспорт
МассивРасширенийФайла = узМассивРасширенийФайлаПисьма();
РасширениеФайла = узРасширениеФайла(ИмяФайла);
Возврат (МассивРасширенийФайла.Найти(РасширениеФайла) <> Неопределено);
КонецФункции
Функция узМассивРасширенийФайлаПисьма()
МассивРасширенийФайла = Новый Массив;
МассивРасширенийФайла.Добавить("msg");
МассивРасширенийФайла.Добавить("eml");
Возврат МассивРасширенийФайла;
КонецФункции
// Получает расширение для переданного имени файла.
//
// Параметры:
// ИмяФайла - Строка - имя файла, для которого необходимо получить расширение.
//
// Возвращаемое значение:
// Строка - расширение, полученное из переданного имени файла.
//
Функция узРасширениеФайла(Знач ИмяФайла) Экспорт
РасширениеФайла = "";
МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь);
Если МассивСтрок.Количество() > 1 Тогда
РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];
КонецЕсли;
Возврат РасширениеФайла;
КонецФункции
#КонецОбласти
// - #165 } +++ [13.05.2019]

View File

@ -640,6 +640,12 @@
НомерКартинки = 1;
ВложениеСтруктура = Новый Структура();
Для Каждого ЭлементВложения Из ИнтернетСообщение.Вложения Цикл
// + #165 Александр { [13.05.2019]
Если ТипЗнч(ЭлементВложения.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда
Продолжить;
КонецЕсли;
// - #165 } +++ [13.05.2019]
пКартинка = Новый Картинка(ЭлементВложения.Данные);
ИмяКартинки = "img"+НомерКартинки+"_"+Формат(ТекущаяДата(),"ДФ=ddMMyyyy_hhmmss");
пТекстHTML = СтрЗаменить(пТекстHTML,"cid:"+ЭлементВложения.Идентификатор,ИмяКартинки);