Имя: Пароль:
1C
1C 7.7
v7: Отправка почты из 1С в терминальном режиме.
0 Славянин
 
27.02.17
15:34
Добрый день. Ребята,может сталкивался кто-нибудь. С помощью Dialmail.dll настроил отправку почты из некоторых документов. С 1с все работают в терминальном режиме. Т.е. при печати документа на сервере в Темп сохраняется файл. Потом он отправляется по почте. Так вот почему то отправляется через раз. Т.е. изначально файл не сохраняется в темп. Под админом всё работает чётко. Может какие-то права досутпа нужно настроить на сервере?
1 Это_mike
 
27.02.17
15:35
ну так посмотри... например, процмоном..
2 ELEA26
 
27.02.17
15:41
(0) а штатные средства 1С почему не используешь? Зачем DLL?
3 ELEA26
 
27.02.17
15:41
ой... 1С7.7... Извини...
4 LienXo
 
27.02.17
15:42
(2) потому что топорики
(0) имя файла - константа?
5 ELEA26
 
27.02.17
15:44
(0) Ну тогда много всего. Через раз - это у кого-то да, у кого-то нет? Или у одного и того же то да, то нет? Если 1 в базе - всегда отправляется? Временные файлы использует? Если да, то куда(имя разное, путь в локальный профиль)? (длина пути, русские буквы в логинах, пробелы). Брандмауэр(фаервол)?
6 Serginio1
 
27.02.17
17:28
Попробуй

Функция ПолучитьАтачмент(file,Врап)
            data = Врап.СоздатьОбъект("System.Net.Mail.Attachment",file);
            // Add time stamp information for the file.
            disposition = data.ContentDisposition;
            IO_File=врап.получитьТип("System.IO.File");
            disposition.CreationDate = IO_File.GetCreationTime(file);
            disposition.ModificationDate = IO_File.GetLastWriteTime(file);
            disposition.ReadDate = IO_File.GetLastAccessTime(file);
            // Add the file attachment to this e-mail message.
            return data;

КонецФункции // ПолучитьАтачмент

Процедура ОтправитьПисьмо(СписокФайлов,ТемаПисьма,smtp,Кому,ОтКого,login,password, ПолноеИмяОтКого)
       врап=СоздатьОбъект("NetObjectToIDispatch45");


            врап.УстЭтоСемерка();


        
            port=Врап.ChangeType("System.Int32",25);
            
            mail = врап.СоздатьОбъект("System.Net.Mail.SmtpClient",smtp,port);
            
            истина=Врап.ChangeType("System.Boolean","true");
            ложь=Врап.ChangeType("System.Boolean","false");
            
         //   mail.EnableSsl = истина;
            mail.UseDefaultCredentials = ложь;
         //   mail.Credentials = врап.СоздатьОбъект("System.Net.NetworkCredential",login, Password);
            mail.DeliveryMethod = Врап.ПолучитьТип("System.Net.Mail.SmtpDeliveryMethod").Network;
            
            Message = врап.СоздатьОбъект("System.Net.Mail.MailMessage");
            MailAddressType= Врап.ПолучитьТип("System.Net.Mail.MailAddress");
            Message.From = врап.СоздатьОбъект(MailAddressType,ОтКого,ПолноеИмяОтКого));
            Message.To.Add(врап.СоздатьОбъект(MailAddressType,Кому));
            Message.Subject = ТемаПисьма;
            Message.IsBodyHtml = истина;

            Message.Body = "";
            
            Для сч=1 По СписокФайлов.размерсписка()  Цикл
                Файл=СписокФайлов.ПолучитьЗначение(сч);
                
                message.Attachments.Add(ПолучитьАтачмент(Файл,Врап));
            КонецЦикла;
            mail.Send(Message);//отправка




            Message.Dispose();
            mail.Dispose();

КонецПроцедуры // ОтправитьПисьмо


врап=СоздатьОбъект("NetObjectToIDispatch45");
    Patch=врап.получитьТип("System.IO.Path");
    Путь=Patch.GetTempPath();
    
    //Возврат;
    Для сч=1 По СпзКлиенты.РазмерСписка()  Цикл
        стр="";
        ВыбКонтрагент=СпзКлиенты.получитьзначение(сч,стр);
        ФайлДляТаблицы=ПрефиксФайла+"_"+стр;
        Файл=ФайлДляТаблицы+".XLS";
        Файл=Patch.Combine(Путь,Файл);
        СпзФайлов.ДобавитьЗначение(Файл);
        //    Сообщить(Файл);
        Сформировать(1,Файл);
    КонецЦикла;
    
    Сообщ="Отправлено!";
    
    // глПросмотрСписка(СпзФайлов);
    Попытка
        ОтправитьПисьмо(СпзФайлов,ПрефиксФайла);
    Исключение
        Сообщ="Ошибка
        |"+ОписаниеОшибки();
    КонецПопытки;
    
    Для сч=1 По СпзФайлов.размерсписка()  Цикл
        Файл=СпзФайлов.ПолучитьЗначение(сч);
        Сообщить(Файл);
        фс.УдалитьФайл(файл);
    КонецЦикла;
7 Serginio1
 
27.02.17
17:31
8 vcv
 
27.02.17
19:10
А как создаётся тот файл, который в TEMP? Если, к примеру, печатью на PDF-принтер, то это асинхронный процесс и к моменту отправки почты файл может быть еще не готов.
Попробовать, в качестве эксперимента, вставить паузу в секунду-две между созданием файла в ТЕМП и отправкой. Если проблема рассосётся, значит асинхронность всему виной.
2 + 2 = 3.9999999999999999999999999999999...