|
|
|
Отправка почты, DialMail | ☑ | ||
|---|---|---|---|---|
|
0
Vika_22
10.01.11
✎
17:25
|
Здравствуйте.
Подскажите, пожалуйста, что можно почитать по логике отправки почты в 1с, а именно с использованием DialMail? |
|||
|
1
ChMikle
10.01.11
✎
17:26
|
есть примеры посмотри поиском уже с готовыми кодами отправки писем и получением
|
|||
|
2
Vika_22
10.01.11
✎
17:29
|
(1)Ищу, но пока что ничего хорошего не попалось.
|
|||
|
3
andrewks
10.01.11
✎
17:39
|
www.dialmail.ru
|
|||
|
4
FN
10.01.11
✎
17:39
|
(2) Нужен пример кода?
ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "DialMail.dll"); ОтправкаПочты = СоздатьОбъект("AddIn.SMTP"); ОтправкаПочты.РабочийКаталог=КаталогПользователя(); ОтправкаПочты.ИспользоватьПрокси=0; ОтправкаПочты.ИспользоватьSSL=0; ОтправкаПочты.ВестиЛогФайл = 1; ОтправкаПочты.ИмяЛогФайла = КаталогПользователя()+"dialmail.smtp.log"; Тек=Создатьобъект("Текст"); Тек.Открыть(КаталогИБ()+"dbmail.cfg"); МояБаза=СокрЛП(Тек.ПолучитьСтроку(1)); МойАдрес=СокрЛП(Тек.ПолучитьСтроку(2)); СМТП=СокрЛП(Тек.ПолучитьСтроку(3)); СерверПриема=СокрЛП(Тек.ПолучитьСтроку(4)); Логин=СокрЛП(Тек.ПолучитьСтроку(5)); Пароль=СокрЛП(Тек.ПолучитьСтроку(6)); ОтправкаПочты.ПочтоваяПрограмма="Client on DialMail"; ОтправкаПочты.MakeContentDescriptionTag = 0; ОтправкаПочты.ТипТелаПисьма=0; текписьмо=ОтправкаПочты.СоздатьПисьмо(МойАдрес,"ТутПишемКому@И_куда.ru",,ЗаголовокСообщения,,текст,); Если ПустоеЗначение(текписьмо)=1 тогда ЗаписьЖурналаРегистрации(текст,"СМС админу","Ошибка при создании письма!",Юзер,5);Возврат; КонецЕсли; Если ОтправкаПочты.Подключиться(СМТП,25,Логин,Пароль,1)=0 тогда ЗаписьЖурналаРегистрации(текст,"СМС админу","Ошибка при подключении к SMTP!",Юзер,5); Возврат; КонецЕсли; рез=ОтправкаПочты.ОтправитьПисьмо(,1,0); Если рез<>1 тогда ЗаписьЖурналаРегистрации(текст,"СМС админу","Ошибка отправки!",Юзер,5); Возврат; КонецЕсли; ОтправкаПочты.Отключиться(); ОтправкаПочты.УдалитьПисьмоИзРабочегоКаталога(); ОтправкаПочты.ОчиститьРабочийКаталог(); |
|||
|
5
andrewks
10.01.11
✎
17:40
|
ОтправкаПочты.УдалитьПисьмоИзРабочегоКаталога();
ОтправкаПочты.ОчиститьРабочийКаталог(); :-) контрольный. в голову. |
|||
|
6
FN
10.01.11
✎
17:43
|
(5) ага
(2) еще вариант без ДиалМайл CDOc=createObject("CDO.Configuration"); CDOc.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").value=2; CDOc.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").value=СокрЛП(СМТП); CDOc.fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport").value=25; CDOc.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").value=СокрЛП(Логин); CDOc.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").value=СокрЛП(Пароль); CDOc.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").value=?(ПустоеЗначение(СокрЛП(Логин))=1,0,1); CDOc.fields.update(); CDO=СоздатьОбъект("CDO.Message"); CDO.configuration = CDOc; CDO.to=СокрЛП(АдресКому); CDO.from = СокрЛП(Адрес); CDO.textBody = Текст; CDO.textBodypart.charset = "windows-1251"; Попытка CDO.send(); Возврат(1); Исключение Сообщить("Ошибка при отправке: "+ОписаниеОшибки(),"!!!"); Возврат (0); КонецПопытки; |
|||
|
7
Vika_22
10.01.11
✎
18:05
|
А если словами, а не кодом, то какая вообще логика отправки почты?
|
|||
|
8
andrewks
10.01.11
✎
18:11
|
(7) формируем письмо, коннектимся к серверу, отправляем, разрываем коннект, прибираем за собой
|
|||
|
9
Vika_22
10.01.11
✎
18:15
|
(8)Спасибо, именно такого объяснения мне и хотелось) А обращений к стандартным процедурам нет?
|
|||
|
10
Vika_22
12.01.11
✎
14:30
|
Еще один вопрос: Подскажите, пожалуйста, вот в Rom-mail есть атрибут Вложения, а как реализовать отправка письма с вложениями в Dial Mail?
|
|||
|
11
v_rtex
12.01.11
✎
14:32
|
опять гугл не работает что ли..
|
|||
|
12
mikecool
12.01.11
✎
14:34
|
(10) почитай справку, наконец )
|
|||
|
13
Vika_22
12.01.11
✎
14:50
|
Нашла)
СоздатьПисьмо(<?>,<?>,<?>,<?>,<?>,<?>,<?>) Синтаксис СоздатьПисьмо(<ОтКого>,<Кому>,<Копии>,<ТемаПисьма>,<Организация>, <ТелоПисьма>,<ПрисоединенныеФайлы>) |
|||
|
14
Vika_22
17.01.11
✎
14:27
|
Здравствуйте снова)
Попробовала сделать внешнюю обработку отправки, в результате при выполнении Почта.ОтправитьПисьмо(,1,0), возвращает результат -1. В чем может быть проблема? Код: Процедура ОтправитьПочту() Если ЗагрузитьВнешнююКомпоненту("DialMail.dll")=0 Тогда Сообщить("Не удалось загрузить внешнюю компоненту DialMail.dll"); Возврат; КонецЕсли; Почта = СоздатьОбъект("AddIn.SMTP"); Почта.РабочийКаталог = КаталогПользователя(); Почта.ИспользоватьПрокси = 0; Почта.ИспользоватьSSL = 0; Почта.ВестиЛогФайл = 1; Почта.ИмяЛогФайла = КаталогПользователя()+"dialmail.smtp.log"; МойАдрес = глПользователь.ЭлПочта; СМТП = СокрЛП("блаблабла"); Логин = глПользователь.ЭлПочта; Пароль = глПользователь.Пароль; Почта.ПочтоваяПрограмма="Client on DialMail"; Почта.MakeContentDescriptionTag = 0; Почта.ТипТелаПисьма=0; ТекПисьмо = Почта.СоздатьПисьмо(МойАдрес,Адрес,,ТемаСообщения,,ТекстСообщения,); Если ПустоеЗначение(текписьмо)=1 тогда Сообщить("Ошибка при создании письма!"); Возврат; КонецЕсли; Если Почта.Подключиться(СМТП,25,Логин,Пароль,1)=0 тогда Сообщить("Ошибка при подключении к SMTP!"); Возврат; КонецЕсли; рез=Почта.ОтправитьПисьмо(,1,0); Если рез<>1 тогда Сообщить("Ошибка отправки!"); Возврат; КонецЕсли; Почта.Отключиться(); Почта.УдалитьПисьмоИзРабочегоКаталога(); КонецПроцедуры; |
|||
|
15
mishaPH
17.01.11
✎
14:32
|
МойАдрес,Адрес
адреса есть? они верные? |
|||
|
16
andrewks
17.01.11
✎
14:35
|
СМТП = СокрЛП("блаблабла");
... Если Почта.Подключиться(СМТП,25,Логин,Пароль,1) |
|||
|
17
mishaPH
17.01.11
✎
14:36
|
Процедура ОтправкаПочты()
ВсегоПисем = ОтправкаПочты.КоличествоПисемВРабочемКаталоге; Если ВсегоПисем <>0 тогда Сообщить(ТекущееВремя()+" Писем на отправку "+ВсегоПисем+" объем "+Число(ОтправкаПочты.ОбщийРазмерПисемВРабочемКаталоге)); Если ОтправкаПочты.Подключиться(SMTP,25,LogSMTP,PassSMTP)=0 тогда Сообщить(ТекущееВремя()+" Не смогли подключиться к SMTP-серверу"); Иначе //Если ОтправкаПочты.ОтправитьВсеПисьма(1,1,0)=1 тогда // Сообщить(ТекущееВремя()+" Все отправлено"); //КонецЕсли; Для к = 1 По ВсегоПисем Цикл кк = ВсегоПисем - к +1; Если ОтправкаПочты.ОтправитьПисьмо(кк, 1, 0)= 0 Тогда Сообщить("Не удалось отправить письмо на " + ОтправкаПочты.Кому); ОтправкаПочты.Отключиться(); Если ОтправкаПочты.Подключиться(SMTP,25,LogSMTP,PassSMTP)=0 тогда Сообщить(ТекущееВремя()+" Не смогли подключиться к SMTP-серверу"); Возврат; КонецЕсли; КонецЕсли; КонецЦикла; ОтправкаПочты.Отключиться(); КонецЕсли; КонецЕсли; КонецПроцедуры // ОтправкаПочты |
|||
|
18
mishaPH
17.01.11
✎
14:36
|
(14) у тебя в параметре отправить письмо, пусто какое отправить
|
|||
|
19
mishaPH
17.01.11
✎
14:38
|
+18 либо укажи номер письма, либо пользуй отправить все.
Но не рекомендую это делать. если 1 письмо из пула не примется сервером, все отправленные не удалятся файлы, и потом ин их опять начнет отправлять |
|||
|
20
mishaPH
17.01.11
✎
14:39
|
ОтправитьПисьмо(<?>,<?>,<?>)
Синтаксис ОтправитьПисьмо(<ПорядковыйНомерПисьмаВРабочемКаталоге>,<УдалятьПослеУдачногоОтправления>,<ЗапуститьВПотоке>) Назначение Отправка письма на сервер SMTP по порядковому номеру в РабочемКаталоге Возвращаемое значение: 1 - операция закончилась удачно. -100 - запущен процесс отправления (при ЗапуститьВПотоке=1) -1 - ошибки при посылке заголовка письма 0 - ошибка при выполнении данной операции (разрыв?, простой сокета?). Параметры: <ПорядковыйНомерПисьмаВРабочемКаталоге> - порядковый номер письма в РабочемКаталоге <УдалятьПослеУдачногоОтправления> - необязательный. При 1 - удаляется из РабочегоКаталога после удачного отправления, 0 - не удалять. По умолчанию 0 <ЗапуститьВПотоке> - необязательный. 1 - запустить в отдельном потоке и генерировать события о состоянии соединения из внешней компоненты в 1С (ОбработкаВнешнегоСобытия); 0 - запустить в основном потоке, события не генерировать. По умолчанию 0. Пример: // E-mail: 'Ivanov#mail.ru', пароль: 'qqq' // Подключаемся к SMTP-серверу, отправляем все письма с последующим удалением ЗагрузитьКомпоненту(''DialMail.dll''); Отправка=СоздатьОбъект(''AddIn.Smtp''); Отправка.РабочийКаталог=''c:\''; Если Отправка.Подключиться(''smtp.mail.ru'')=1 тогда Пока Отправка.КоличествоПисемВРабочемКаталоге>0 цикл Если Отправка.ОтправитьПисьмо(1,1)<=0 тогда Предупреждение(''Ошибка отправки письма''); Отправка=0; Возврат; КонецЕсли; КонецЦикла Отправка.Отключиться(); КонецЕсли; |
|||
|
21
Vika_22
17.01.11
✎
14:40
|
(15)Адреса проверила,есть и они верные
|
|||
|
22
mishaPH
17.01.11
✎
14:40
|
(21) см (17) (18) (19)
|
|||
|
23
Vika_22
17.01.11
✎
14:41
|
Как всего много 0_o =) Сейчас буду разбираться)
|
|||
|
24
andrewks
17.01.11
✎
14:41
|
(18) можно так, если одно письмо
Если ОтправкаПочты.Подключиться(***)=0 Тогда Предупреждение("Не удалось подключиться к почтовому серверу!"); Возврат 0; КонецЕсли; Аттач=ИмяФД; Рез=ОтправкаПочты.СоздатьПисьмо(АдресОтпр,АдресПолуч,"",Тема,"***","***",Аттач); Если ПустоеЗначение(Рез)=1 Тогда Предупреждение("Произошла ошибка при создании письма!"); Возврат 0; КонецЕсли; Если ОтправкаПочты.ОтправитьПисьмо(,1)<=0 Тогда Предупреждение("Произошла ошибка при отправке письма!"+СокрЛП(ОтправкаПочты.ПоследняяОшибка)+" "+ОтправкаПочты.ПоследняяОшибкаСтр); //Сообщить("Последний ответ сервера: "+ОтправкаПочты.ПоследнийОтветСервера); Возврат 0; КонецЕсли; ОтправкаПочты.Отключиться(); |
|||
|
25
FN
17.01.11
✎
14:43
|
(19) Указывать номер письма необязательно - отправится "текущее"
(23) выложи сюда содержимое файла КаталогПользователя()+"dialmail.smtp.log"; |
|||
|
26
Vika_22
17.01.11
✎
14:44
|
Спасибо за такое большое количество информации
|
|||
|
27
andrewks
17.01.11
✎
14:44
|
кто-нить (16) прочитал?
|
|||
|
28
Vika_22
17.01.11
✎
14:47
|
(16) (27) А что не так, там "блабла" написано вместо имени сервера
|
|||
|
29
andrewks
17.01.11
✎
14:50
|
(28) и? в смысле ты заменила реальное имя? тогда не надо вводить людей в заблуждение, а писать, например, так:
СМТП = ****; //здесь имя почтового сервера |
|||
|
30
mishaPH
17.01.11
✎
14:50
|
(27) бу га га
|
|||
|
31
Vika_22
17.01.11
✎
14:50
|
(29) Прошу прощения, не знала как правильно заменить
|
|||
|
32
mishaPH
17.01.11
✎
14:51
|
а ну тогда пробуй указать номер
|
|||
|
33
andrewks
17.01.11
✎
14:52
|
(30) ничё смешного, тут иногда такие перлы попадаются в коде, что это ещё цветочки
|
|||
|
34
FN
17.01.11
✎
15:00
|
так содержимое dialmail.smtp.log будет или дальше будем гадать?
|
|||
|
35
andrewks
17.01.11
✎
15:01
|
(34) щас тебе тут вывалят копипаст на 1 мег :-)))
|
|||
|
36
Vika_22
17.01.11
✎
15:09
|
||||
|
37
Vika_22
17.01.11
✎
15:09
|
Не умею я ссылки делать если что( Уж простите меня(((
|
|||
|
38
FN
17.01.11
✎
15:13
|
(36) используй другой смтп сервер (этот не хочет с тобой дружить). Спроси у вашего админа какой нужно использовать.
|
|||
|
39
Vika_22
17.01.11
✎
15:15
|
(38) Спасибо) Сейчас спрошу админа ^__^
Какой плохой сервер, не хочет со мной дружить ((( |
|||
|
40
filh
17.01.11
✎
15:22
|
что не понятного?
550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1) |
|||
|
41
Vika_22
17.01.11
✎
15:23
|
(40) Ну да, абсолютно понятная фраза, особенно See RFC2821 4.1.1.1
|
|||
|
42
filh
17.01.11
✎
15:44
|
(41) Да вроде понятно, вот: http://tools.ietf.org/html/rfc2821#section-4.1.1.1
|
|||
|
43
Vika_22
18.01.11
✎
11:54
|
(42) Ага, спасибо, почитаю.
|
|||
|
44
Vika_22
18.01.11
✎
12:01
|
В результате - я доработала свою обработку, и проверила ее с другим SMTP сервером, и все заработало. Спасибо всем за советы.
|
|||
|
45
mishaPH
18.01.11
✎
12:16
|
(25) В принципе да, но это делать не стоит т.к. в случае неудачной отправки он его не удалит и впадет в цикл
|
|||
|
46
mishaPH
18.01.11
✎
12:16
|
(44) Поздравляю.
|
|||
|
47
FN
18.01.11
✎
12:42
|
(45) ну может и так...
но я использую такую методу уже пару лет (минимум 50 сообщений в день отправляется) и пока ниодного затыка. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |