|
v7: Отправка email из 7.7 | ☑ | ||
---|---|---|---|---|
0
SashaNNV
18.11.15
✎
21:49
|
Добрый вечер
Вот уже черти знает сколько времени бьюсь пытаясь сделать отправку почты из 7.7. Пытаюсь сделать через CDO: Процедура Отправить() mail = CreateObject("CDO.Message"); mail.From = СокрЛП("Отправитель")+"<"+СокрЛП("[email protected]")+">"; mail.To = СокрЛП("Контрагент")+"<"+СокрЛП(Контрагент.почта)+">"; ...... Ругается: mail.From = mail.From = СокрЛП("Отправитель")+"<"+СокрЛП("[email protected]")+">"; {Документ.СчетУслуги.Форма.Модуль(274)}: Поле агрегатного объекта не обнаружено (From) Почему? Заранее спасибо за ответ. |
|||
1
SashaNNV
18.11.15
✎
21:51
|
1С стоит на windows server 2012
|
|||
2
Мимохожий Однако
18.11.15
✎
21:56
|
Посмотри фрагменты. Валялось в загашниках.
... Письмо=СоздатьОбъект("AddIn.V7Mail"); Письмо.Подключиться("MAPI",,""); Письмо.НовоеСообщение(); Если Файлы.РазмерСписка()> 0 Тогда Для н=1 По Файлы.РазмерСписка() Цикл Письмо.ДобавитьФайл(Файлы.ПолучитьЗначение(н)); КонецЦикла; КонецЕсли; Письмо.Заголовок=Тема; Письмо.Текст=СокрЛП(Текст);//+"(Сформировано автоматически)"; Письмо.ДобавитьАдрес(ЭлектронныйАдрес); Письмо.Послать(0); Письмо.Отключиться(); ... Процедура ПриОткрытии() Попытка Результат = ЗагрузитьВнешнююКомпоненту("V7plus.dll"); Исключение Результат = 0; Сообщить("Внешняя компонента V7plus.dll не загружена |Почта работать не будет"); // глБезПочты=1; //чтобы не открывалась обработка Письмо СтатусВозврата(0); КонецПопытки; |
|||
3
HawkEye
19.11.15
✎
18:29
|
(0) как то так
CDOConfig = СоздатьОбъект("CDO.Configuration"); CDOMessage = СоздатьОбъект("CDO.Message"); CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2; //для работы без Exchange CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = СокрЛП(лбВхФилиал.СерверОтправки); // smtp.mail.ru CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 25; // 25 CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = лбВхФилиал.АутентификацияПриОтправке; CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = СокрЛП(лбВхФилиал.ПочтаЛогин); // [email protected] CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = СокрЛП(лбВхФилиал.ПочтаПароль); // 123 CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = 0; CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 60; CDOConfig.Fields.Update(); // CDOMessage.Configuration = CDOConfig; CDOMessage.From = СокрЛП(лбВхФилиал.ПочтовыйАдрес); // [email protected] Кому = ?(СокрЛП(вхАдресПолучателя) = "", СокрЛП(лбВхФилиал.АдресПолучателя), СокрЛП(вхАдресПолучателя)); ЗаголовокПисьма = ?(СокрЛП(вхЗаголовок) = "", СокрЛП(лбВхФилиал.Заголовок), СокрЛП(вхЗаголовок)); ТекстСообщения = ?(СокрЛП(вхТекстСообщения) = "", "Автообмен. Отправитель: " + СокрЛП(лбВхФилиал.Наименование) + " " + ТекущаяДата()+" - "+ТекущееВремя(), СокрЛП(вхТекстСообщения)); CDOMessage.To = Кому; // [email protected] CDOMessage.Subject = ЗаголовокПисьма; // CDOMessage.TextBody = ТекстСообщения; // "Отправлено из 1С" // CDOMessage.textBodypart.charset="windows-1251"; Сообщить("Адрес получателя: " + Кому); Если вхАвтообмен = 1 Тогда //надо прикрепить файлы КаталогБазы=СокрЛП(КаталогИБ()); стр=КаталогБазы+"PC\" + СокрЛП(лбВхФилиал.ИмяФайлаВыгрузки); Сообщить("Имя файла выгрузки: "+стр); Если ФС.СуществуетФайл(стр)=1 Тогда CDOMessage.AddAttachment(стр); Иначе стр=КаталогБазы+"CP\" + СокрЛП(лбВхФилиал.ИмяФайлаВыгрузки); Сообщить("Ищем файл: "+стр); Если ФС.СуществуетФайл(стр)=1 Тогда CDOMessage.AddAttachment(стр); Иначе Сообщить("Не найден файл выгрузки: "+стр); а=1/0; КонецЕсли; КонецЕсли; КонецЕсли; Сообщить("Идет отправка сообщения ..."); Попытка CDOMessage.Send(); Сообщить("Отправлен "); Исключение Сообщить("Не удалось отправить отчет "); КонецПопытки; |
|||
4
Serginio1
19.11.15
✎
18:45
|
||||
5
SashaNNV
22.11.15
✎
14:20
|
(3) Спасибо за ответ, код отлично работает на windows 8.1, а вот на server 2012 не могу никак запустить. Почему то не открываются COM интерфейсы.
|
|||
6
Злопчинский
22.11.15
✎
14:46
|
на всяки случай, готовая отсылалка по cdo, работает как интерактивно, так и с получением параметров
http://catalog.mista.ru/public/14131/ |
|||
7
HawkEye
22.11.15
✎
16:29
|
(5) у меня и на 2012 работает...
|
|||
8
SashaNNV
22.11.15
✎
17:03
|
(7) Какой у вас на сервере стоит Outlook?
|
|||
9
SashaNNV
22.11.15
✎
17:45
|
Выяснил что это проблема 1С, т.к. CDO из других приложений срабатывает.
Почему 1С блокирует COM запросы? |
|||
10
Злопчинский
22.11.15
✎
18:45
|
(9) выдай пользователю под которым проверяешь - максимальные права в 1с и максимальные права в виндах
|
|||
11
mishaPH
модератор
22.11.15
✎
18:50
|
Я с этим CDO намудохался с раскодировкой из бейз64.
Что-то с правами и политиками в домене.. админы так и не смогли решить, сто не работало и вызывало ошибку. Но свежеустановленных компах все работало. а почту я отправляю через диалмейл. или ром мейл. дешево и сердито и не зависит от доп пакетов виндов или оутлука |
|||
12
Serginio1
22.11.15
✎
18:51
|
(11) И никто не хочет использовать (4)
А ведь кроме почты, там вся мощь Net. |
|||
13
HawkEye
22.11.15
✎
19:09
|
(8) никакой....зачем он на сервере?
|
|||
14
SashaNNV
22.11.15
✎
20:32
|
(10) В 1С права админ, win тоже админ.
Какойто глюк с 1С. 1С пререустанавливал, не помогло. Переустанавливать винду не вариант :( Настроек жуть сколько. |
|||
15
SashaNNV
22.11.15
✎
20:33
|
(11) Тут похоже проблема не в CDO, а в том что 1С не хочет работать с COM запросами.
|
|||
16
Serginio1
22.11.15
✎
20:37
|
(15) Попробуй 4 и будет понятно как с COM 1C hf,jnftn
|
|||
17
SashaNNV
22.11.15
✎
22:28
|
Это очень странно..., но выяснил что у пользователей все работает... а у администратора нет... в чем может быть косяк :)
Естественно все дело происходит под терминалами. |
|||
18
mishaPH
модератор
22.11.15
✎
22:51
|
(17) смотри. что я писал. какие-то проблемы с доменными правами.
|
|||
19
mishaPH
модератор
22.11.15
✎
22:51
|
забей ты на это СДО.
|
|||
20
mishaPH
модератор
22.11.15
✎
22:52
|
+18 или политиками, которые периодически при изменении не убираются с компов. А остаются и потом ты хрен что найдешь. Вроде включено все и ничего не заблокировано. ан нет.
|
|||
21
ЧеловекДуши
23.11.15
✎
07:03
|
(17) Судя по рекомендациям от (11), остается только "Format C: /Y" :)
|
|||
22
Масянька
23.11.15
✎
08:13
|
Процедура ПриОткрытии()
Отправка = Форма.Параметр.Получить("Отправка"); УдалитьФайл = 1; ПечФормаСчета = 1; SMTPСервер = "smtp.gmail.com"; SMTPПорт = "465"; Отправитель = "...."; Если ПустоеЗначение(Форма.Параметр) = 0 Тогда Докум = Форма.Параметр.Получить("Контекст"); Адрес = СокрЛП(Докум.Контрагент.ЭлПочта); Форма.SMTPСервер.Заголовок(SMTPСервер); Форма.SMTPПорт.Заголовок(SMTPПорт); Форма.Отправитель.Заголовок(Отправитель); Форма.Адрес.Заголовок(Адрес); Тема = ...; Текст = ...; КонецЕсли; Активизировать("кнОтправить"); КонецПроцедуры // ПриОткрытии Функция Отправить(КаталогДляЗаписи) Форма.Отправка.Заголовок("Идет отправка сформированного письма по электронной почте."); Письмо = СоздатьОбъект("CDO.Message"); Письмо.To = Адрес; Письмо.From = Отправитель; Письмо.Subject = Тема; Письмо.TextBody = Текст; Письмо.TextBodyPart.Charset = "iso-8859-5"; Письмо.AddAttachment(КаталогДляЗаписи); Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = SMTPСервер; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = Отправитель; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = ....; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = SMTPПорт; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 60; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendmailaddress").Value = Адрес; Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = -1; Письмо.Configuration.Fields.Update(); Попытка Письмо.Send(); Форма.Отправка.Заголовок(""); Форма.Параметр.Установить("Отправка", 1); Предупреждение("Успешно отправлено на электронный адрес: " + Адрес); Исключение Форма.Отправка.Заголовок(""); Форма.Параметр.Установить("Отправка", 0); Предупреждение("Не удалось отправить по причине: " + РазделительСтрок + ОписаниеОшибки()); Возврат 1; КонецПопытки; КонецФункции // Отправить //****************************************************************************** cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword"; cdoSendEmailAddress = "http://schemas.microsoft.com/cdo/configuration/sendemailaddress"; cdoAutoPromoteBodyParts = "http://schemas.microsoft.com/cdo/configuration/autopromotebodyparts" ; cdoFlushBuffersOnWrite = "http://schemas.microsoft.com/cdo/configuration/flushbufferson;write" ; cdoHTTPCookies = "http://schemas.microsoft.com/cdo/configuration/httpcookies" ; cdoLanguageCode = "http://schemas.microsoft.com/cdo/configuration/languagecode" ; cdoNNTPAccountName = "http://schemas.microsoft.com/cdo/configuration/nntpaccountname" ; cdoNNTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/nntpauthenticate" ; cdoNNTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/nntpconnectiontimeout" ; cdoNNTPServer = "http://schemas.microsoft.com/cdo/configuration/nntpserver" ; cdoNNTPServerPickupDirectory = "http://schemas.microsoft.com/cdo/configuration/nntpserverpickupdirectory" ; cdoNNTPServerPort = "http://schemas.microsoft.com/cdo/configuration/nntpserverport" ; cdoNNTPUseSSL = "http://schemas.microsoft.com/cdo/configuration/nntpusessl" ; cdoPostEmailAddress = "http://schemas.microsoft.com/cdo/configuration/postemailaddress" ; cdoPostPassword = "http://schemas.microsoft.com/cdo/configuration/postpassword" ; cdoPostUserName = "http://schemas.microsoft.com/cdo/configuration/postusername" ; cdoPostUserReplyEmailAddress = "http://schemas.microsoft.com/cdo/configuration/postuserreplyemailaddress" ; cdoPostUsingMethod = "http://schemas.microsoft.com/cdo/configuration/postusing" ; cdoSaveSentItems = "http://schemas.microsoft.com/cdo/configuration/savesentitems" ; cdoSendEmailAddress = "http://schemas.microsoft.com/cdo/configuration/sendemailaddress" ; cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword" ; cdoSendUserName = "http://schemas.microsoft.com/cdo/configuration/sendusername" ; cdoSendUserReplyEmailAddress = "http://schemas.microsoft.com/cdo/configuration/senduserreplyemailaddress" ; cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing" ; cdoSMTPAccountName = "http://schemas.microsoft.com/cdo/configuration/smtpaccountname" ; cdoSMTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ; cdoSMTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" ; cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"; cdoSMTPServerPickupDirectory = "http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory"; cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport"; cdoSMTPUseSSL = "http://schemas.microsoft.com/cdo/configuration/smtpusessl"; cdoURLGetLatestVersion = "http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion"; cdoURLProxyBypass = "http://schemas.microsoft.com/cdo/configuration/urlproxybypass"; cdoURLProxyServer = "http://schemas.microsoft.com/cdo/configuration/urlproxyserver"; cdoUseMessageResponseText = "http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext"; Все работает. |
|||
23
Злопчинский
23.11.15
✎
11:21
|
Кстати, надо учесть, что почтовые сервера могут дать отлуп если в поле "От" стоит мыло, не совпадающее с сервером...
|
|||
24
SashaNNV
23.11.15
✎
15:17
|
(21) Именно так и есть...
|
|||
25
SashaNNV
23.11.15
✎
15:18
|
Подскажите как дождаться создания файла перед отправкой по почте?
Спасибо. |
|||
26
Serginio1
23.11.15
✎
15:21
|
(24) Смотри, что у тебя зарегистрировано по CDO.Message
у клиентов и у администратора |
|||
27
Злопчинский
23.11.15
✎
15:27
|
(25) В ОбработкеОжидания проверять наличие файла или настроить через ВК генерацию ВнешнегоСобытия при появлении файла в папке
|
|||
28
SashaNNV
23.11.15
✎
15:28
|
повторов = 0;
Пока ФС.СуществуетФайл(ИмяФайлаPDF)=0 цикл Для i=1 По 10000 Цикл КонецЦикла; Состояние("Подготовка файла. Подождите ..."); повторов = повторов + 1; Если повторов = 1000 тогда Прервать; КонецЕсли; конеццикла; Сделал ожидание таким образом. |
|||
29
Масянька
23.11.15
✎
15:31
|
(28)
Функция ПодготовитьФайл(КаталогДляЗаписи) Ошибка = 0; Форма.Отправка.Заголовок("Идет формирование письма."); Попытка ЗагрузитьВнешнююКомпоненту("SpreadSheet.dll"); Исключение Предупреждение("Не удалось загрузить компоненту SpreadSheet.dll."); Ошибка = 1; Возврат Ошибка; КонецПопытки; Йоксель = СоздатьОбъект("ТабличныйДокумент"); Конвертер = СоздатьОбъект("КонвертерExcel"); ВремТабл = Конвертер.Создать(); Йоксель.ЗагрузитьИзТаблицы(ИсхТабл); ВремТабл.Листы.Добавить("Счет", Йоксель); Параметры = Йоксель.ПараметрыПечати; Параметры.ПолеСверху = 10; Параметры.ПолеСнизу = 10; Параметры.ПолеСлева = 10; Параметры.ПолеСправа = 10; Параметры.АвтоМасштаб = 1; Параметры.Ориентация = 1; //Йоксель.Показать(ИсхТабл); Конвертер = СоздатьОбъект("Йоксель.ГрафическийКонвертер.PDF"); Конвертер.ВысотаСтраницы = 297*56.7; Конвертер.ШиринаСтраницы = 210*56.7; Конвертер.КоличествоБитНаПиксел = 24; Конвертер.Документ = Йоксель;//это табличный документ от йокселя Конвертер.ПолеСлева = 750; Конвертер.ПолеСверху = 300; Конвертер.ПолеСправа = 0; Конвертер.ПолеСнизу = 300; Конвертер.ЗаписатьВФайл(КаталогДляЗаписи); Йоксель.Очистить(); Возврат Ошибка; КонецФункции // ПодготовитьФайл Процедура ПоКнопкеПечать() Печать(ИсхТабл); ИмяФайла = "Счет " + СокрЛП(глНомерНаПечать(Докум)) + " от " + СокрЛП(НРег(Формат(Докум.ДатаДок, "Д ДДММММГГГГ"))); КаталогДляЗаписи = Строка(КаталогИБ() + "Account\" + ИмяФайла + "pdf"); Если ПодготовитьФайл(КаталогДляЗаписи) = 0 Тогда Отправить(КаталогДляЗаписи); КонецЕсли; Если (УдалитьФайл = 1) Тогда // удаляем сохраненный файл Попытка ФС.УдалитьФайл(КаталогДляЗаписи); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; Форма.Отправка.Заголовок(""); Форма.Закрыть(); КонецПроцедуры // ПоКнопкеПечать У меня внешняя форма (счет, СФ, накладная). Отправить и Подготовить - лежит выше (в ветке). |
|||
30
Масянька
23.11.15
✎
15:34
|
И это: судя по всему, у тебя ящик у местного провайдера. Да?
|
|||
31
Злопчинский
23.11.15
✎
15:46
|
(28) Для i=1 По 10000 Цикл ... КонецЦикла;
. не, это имхо плохо - жди обозримое время формирования Время1=_GetPerformanceCounter(); Пока (_GetPerformanceCounter()-Время1) < 5000 Цикл //1000тиков=1сек а тут проверяй существоание просто жди 5 сек (или сколько надо) пока файл не появится |
|||
32
Serginio1
23.11.15
✎
15:47
|
(25) Если бы обратил внимание на 4 то там есть и Thread.Sleep
Вообще для 7 ки очень полезная штука |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |