Имя: Пароль:
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
и все равно не взлетело, поэтому сформировал структуру письма и передал процедуре ЭлектроннаяПочта.ОтправитьСообщение()
Такие дела ))