Имя: Пароль:
1C
1С v8
Вложение Excel в ИнтернетПочта с ошибкой
,
0 СноваЗдорова
 
26.01.15
11:28
Добрый день, помогите, пожалуйста, может кто-то сталкивался?
Я регламентным заданием формирую отчет. Табличный документ сохраняю в формате Эксель через метод Записать(). Обработка сразу этот файл помещает вложение в ИнтернетПочтовоеСообщение методом Добавить(). Временный файл в момент отладки открывается и содержимое устраивает, но в сообщении, которое приходит на почту "битый" файл. Сначала удалось победить это в тестовой базе тем, что сменил формать .xlsx на xls97. Сейчас перенесли в боевую базу и сообщения снова стали приходить с "битым" вложением и смена формата не помогает.
Расскажите, есть у кого опыт, как побороть эту проблему, может идеи какие?
1 ShoGUN
 
26.01.15
11:33
(0) Если промежуточно сохранять отчёт, до вложения в письмо - правильный файл сохраняется? Уверен, что формировании письма проблема, а не в получении? Получаешь обычным почтовым клиентом?
2 СноваЗдорова
 
26.01.15
11:55
До вложения временный файл отлично открывается
3 СноваЗдорова
 
26.01.15
12:22
Получаю аутлуком
4 DrZombi
 
гуру
26.01.15
12:32
Код покажи, все работает. Проблема на вашей стороне :)
5 СноваЗдорова
 
26.01.15
12:32
Есть еще интересный момент. Я отправляю почту на ящики нашего почтовика и во внешние ящики. Во внешние приходит вложение не битое. Если отправляю с внешнего этот файл, тоже все, естественно в порядке.
6 СноваЗдорова
 
26.01.15
12:33
Сообщение = Новый ИнтернетПочтовоеСообщение;
        Сообщение.Отправитель = Отправление.УчетнаяЗаписьОтправитель.АдресЭлектроннойПочты;
        Тема = Отправление.Наименование;
        Если Отправление.СформироватьНаименованиеПоКоду Тогда
            Попытка
                Выполнить("Тема = " + Отправление.Тема);
            Исключение
                ЗаписьЖурналаРегистрации("Не сформировано название отчета", УровеньЖурналаРегистрации.Предупреждение, Отправление.Ссылка.Метаданные(), Отправление.Ссылка, ОписаниеОшибки());
                Возврат;
            КонецПопытки;
        КонецЕсли;
        Сообщение.ИмяОтправителя = Отправление.УчетнаяЗаписьОтправитель.Наименование;
        Сообщение.Тема = Тема;
        ВремОтчПуть = КаталогВременныхФайлов() + Отправление.Наименование + ".xls";
        Рез.Записать(ВремОтчПуть, ТипФайлаТабличногоДокумента.XLS);
        Вложение = Сообщение.Вложения.Добавить(ВремОтчПуть, Отправление.Наименование);
        Получатели = Отправление.Получатели.Выбрать();
        Пока Получатели.Следующий() Цикл
            Если ЗначениеЗаполнено(Получатели.ЭлектронныйАдрес) Тогда
                АдресПолучателя = Получатели.ЭлектронныйАдрес;
            Иначе
                АдресПолучателя = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(Получатели.КонтактноеЛицо);
            КонецЕсли;
            ПочтовыеАдреса = Сообщение.Получатели;
            ПочтовыйАдрес = ПочтовыеАдреса.Добавить();
            ПочтовыйАдрес.Адрес = АдресПолучателя;
        КонецЦикла;
        Попытка
            Почта.Послать(Сообщение);
        Исключение
            ЗаписьЖурналаРегистрации("Ошибка отправки отчета", УровеньЖурналаРегистрации.Ошибка, Отправление.Ссылка.Метаданные(), Отправление.Ссылка, ОписаниеОшибки());
            Возврат;
        КонецПопытки;
        Почта.Отключиться();
7 IBTM
 
26.01.15
12:33
(0) было подобное, проблему по моему решил, что в сам текст имени файла дописывал его расширение.
8 ShoGUN
 
26.01.15
12:34
(5) Самый трэш. Я сталкивался уже с тем, что ИнтернетПочта не всегда корректно работает, но у меня проблемы были при получении, тоже с конкретного сервера.
9 DrZombi
 
гуру
26.01.15
12:40
А я вот так делаю:

ИмяФайлаЕксель = ПолучитьИмяВременногоФайла("tmp"); //XLSX
ТабДок.Записать(ИмяФайлаЕксель,ТипФайлаТабличногоДокумента.XLSX)

    ИПП = Новый ИнтернетПочтовыйПрофиль;
    ИПП.АдресСервераSMTP     = Константы.SMTPServer.Получить();
    ИПП.ВремяОжидания         = Константы.SMTPВремяОжидания.Получить();
    ИПП.Пароль                 = Константы.SMTPServerPasswprd.Получить();
    ИПП.ПарольSMTP             = Константы.SMTPПарольSMTP.Получить();
    ИПП.Пользователь         = Константы.SMTPServerLogin.Получить();
    ИПП.ПользовательSMTP     = Константы.SMTPПользовательSMTP.Получить();
    ИПП.ПортSMTP             = Константы.SMTPПортSMTP.Получить();
    ИПП.АутентификацияSMTP     = СпособSMTPАутентификации.ПоУмолчанию;
    ИПП.АутентификацияPOP3     = СпособPOP3Аутентификации.Обычная;
    
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    
    НетАдресов = Истина;
    Копия_ТЗ_АдресаПочты = ТЗ_АдресаПочты.Скопировать(,"АдресЭлектроннойПочты");
    Копия_ТЗ_АдресаПочты.Свернуть("АдресЭлектроннойПочты");
    Для Каждого СтрокаПочты Из Копия_ТЗ_АдресаПочты Цикл
        АдресЭлектроннойПочты = СокрЛП(СтрокаПочты.АдресЭлектроннойПочты);
        Если ПустаяСтрока(АдресЭлектроннойПочты) Тогда
            Продолжить;
        КонецЕсли;
        Адрес = Сообщение.Получатели.Добавить(АдресЭлектроннойПочты);
        Адрес.ОтображаемоеИмя = "<Имя пользователя, представление>";
        
        НетАдресов = Ложь;
    КонецЦикла;
    
    Если НетАдресов Тогда
        Возврат Ложь;
    КонецЕсли;
    
    ТекстТемы       = "";
    ТекстСообщения = "";
    ПолучитьТекстСообщенияТекстТемы(СтрокаОтдел, ТекстТемы,ТекстСообщения, ДатаВремяОтчета,ДатаВремяОтчетаСервер);
    
    Сообщение.Отправитель.Адрес = Константы.Отправитель.Получить();
    Сообщение.Тема = ТекстТемы;
    Сообщение.Тексты.Добавить(ТекстСообщения);
    
    Вложение = Новый ДвоичныеДанные(ИмяФайлаЕксель);
    Сообщение.Вложения.Добавить(Вложение,"Файл_"+Формат(ДатаВремяОтчета,"ДФ=dd.MM.yyyy")+".XLSX");
    
    ПочтаКлиент = Новый ИнтернетПочта;
    ПочтаКлиент.Подключиться(ИПП, ПротоколИнтернетПочты.POP3);
    ПочтаКлиент.Послать(Сообщение);
    ПочтаКлиент.Отключиться();
10 DrZombi
 
гуру
26.01.15
12:42
(6) У тебя добавление Кривое. Там нуна добавить Двоичные данные. При этом имя файла не имеет значение.
11 kortun
 
26.01.15
12:45
(7) ага, было такое же, пока расширение не стали дописать во вложении, на той стороне приходил якобы битый файл, хотя если вручную потом расширение добавить, то все ок было.
12 СноваЗдорова
 
26.01.15
13:44
(10) Ну как бы он вложение делает двоичные данные. Загружает туда файл, видимо. И такой момент, что на gmail почту приходит вложение читабельное
13 СноваЗдорова
 
26.01.15
13:45
(9) Но попробую как ты предлагаешь. расскажу тогда пзже ))
14 СноваЗдорова
 
26.01.15
13:46
(11) расширение и имя файла во вложении нормальные
15 СноваЗдорова
 
26.01.15
14:16
Не помогли советы выше, парни )))
16 СноваЗдорова
 
26.01.15
14:21
похоже косяк у Outlook. через веб-интерфейс вложения открываются... во внешней почте открываются, и, внимание! на Тандерберде открываются. Парни, есть идеи?
17 DrZombi
 
гуру
26.01.15
14:30
(16) Странно, я то вообще отправляю с сервера.
И причем тут ОутЛюк?
18 DrZombi
 
гуру
26.01.15
14:34
+(17) Как вариант, для теста отправь текстовый файл.
Можешь еще отправить Zip архив.
А ты под каким пользователем отправляешь?
У вас УФ или Толстый клиент?
19 Масянька
 
26.01.15
14:52
(16) Ящик (с которого отправляется) на бесплатной почте какой-то или у местного провайдера?
20 СноваЗдорова
 
26.01.15
15:06
Ящик с которого шлем на нашем сервере... Мало того с тестовой базы, где я писал эту процедуру через эту же учетку в том же формате отправляется файл и открывается без проблем. Черная магия...
21 СноваЗдорова
 
26.01.15
15:06
(18) с сервера в регламенте
22 СноваЗдорова
 
26.01.15
15:07
(17) потому что при использовании не аутлука как почтового клиента вложение открывается как надо...
23 СноваЗдорова
 
26.01.15
16:07
В общем расскажу на всякий случай как победил...
в итоге методом тыка менял форматы, на второй итерации формата xlsx стало выгружаться читабельное вложение. Что к чему осталось неясным... Такие дела
24 СноваЗдорова
 
02.02.15
12:52
(9) Ну в общем говоря, хочу добавить окончательное решение. На самом деле надо было сразу в типовой посмотреть ))

Все как у тебя написано на 8.3 без ошибки работает. На 8.2 пришлось исправить на

Вложение = Новый ДвоичныеДанные(ИмяФайлаЕксель);
    Сообщение.Вложения.Добавить(Вложение,"Файл_"+Формат(ДатаВремяОтчета,"ДФ=dd.MM.yyyy")+".XLSX");

на

        Рез.Записать(ВремОтчПуть, ТипФайлаТабличногоДокумента.XLSX);
        Вложение = ПолучитьДвоичныеДанные(ВремОтчПуть);
        Сообщение.Вложения.Добавить(Вложение, Отправление.Наименование + ".xlsx");

и функция

Функция ПолучитьДвоичныеДанные(ИмяФайла)

    Файл = Новый Файл(ИмяФайла);
    
    Если Файл.Существует() Тогда
        Данные = Новый ДвоичныеДанные(ИмяФайла);
        Попытка
            УдалитьФайлы(ИмяФайла);
        Исключение
        КонецПопытки;
        Возврат Данные;
    Иначе
        Возврат Неопределено;
    КонецЕсли;

КонецФункции


В итоге все взлетело
25 СноваЗдорова
 
06.02.15
13:57
и все равно не взлетело, поэтому сформировал структуру письма и передал процедуре ЭлектроннаяПочта.ОтправитьСообщение()
Такие дела ))