Имя: Пароль:
1C
 
Отправка почты, 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 сообщений в день отправляется) и пока ниодного затыка.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой