Обсуждение:библиотека отправки писем из RSL по smtp
0 (0)
Обсуждение:библиотека отправки писем из RSL по smtp ( Обсуждение примера 27.12.2007 10:53 )
0(0)DLM для отправки почтовых сообщений по протоколу smtp.
тестировал только на 5.0 73 сборка, не знаю как на других работать будет.
Посмотреть пример
>> ОтветитьНа мой взгляд, правильней было бы сделать DLM для работы с сокетами... ( Иванов Александр 27.12.2007 12:11 )
0(0)А реализацию протокола уже на RSL. Тогда можно было бы легко это дело расширять, к примеру добавить авторизацию...
>> Ответитьдумаю можно попробовать создать клиентский сокет ( EpBuLaT 27.12.2007 12:37 )
0(0)как будет время займусь
>> ОтветитьДа в принципе можно и не только клиентский... ( Иванов Александр 27.12.2007 12:53 )
0(0)Просто вытащить часть сокетных функций в составе класса в RSL и достаточно. А сами SMTP и POP3 всякие вполне реализуемы на RSL. Немного придется повозиться с авторизацией SMTP к примеру CRAM-MD5, но тоже ничего невозможного...
Опять же, если получить возможность слушать входящие соединения по сокету, то и серверные приложения на RSL можно писать будет. С многониткой конечно будут проблемы, но можно вместо нее невытесняющую многозадачность использовать :)
>> Ответитьа как мне заменить архив новым обновленным? ( EpBuLaT 28.12.2007 09:15 )
0(0)что-то я не нашел :)
>> Ответить
Не сложновато будет? (+) ( sokols 28.12.2007 09:43 )
0(0)Вот примерчик безо всяких DLL-к практически стандартными средствами
/*************************************************************************** 25.07.06 SS Отправка письма. Sender : login без суффикса Recipient : Адреса перечислять через " ", "," или ";". Суффикс "@isbank.ru" можно опускать Subject и Body: в DOS-866 Attachment: Файл с путем в обычной (относительно СП) или UNC нотации. Относительный путь не жрет. ***************************************************************************/ import rslx; macro SendLetter(Sender, Recipient, Subject, Body, Attachment) private const MAIL_HOST = "192.168.0.200", DOMAIN = "@isbank.ru"; private file r() txt write; private var att, i=0, {UserNumber}, objMessage; // open(r, GetSysDir + "temp." + {UserNumber}); open(r, "..\\TXTFILE\\" + "temp." + {UserNumber}); Sender = Sender + DOMAIN; SetDelim(r, ", ;"); r.str = Recipient; Recipient = ""; while(Trim(r(i)) != "") if(Index(r(i), "@") == 0) Recipient = Recipient + Trim(r(i)) + DOMAIN + ","; else Recipient = Recipient + Trim(r(i)) + ","; end; i = i + 1; end; Recipient = SubStr(Recipient, 1, StrLen(Recipient)-1); objMessage = ActiveX("CDO.Message"); objMessage.Subject = Subject; objMessage.From = Sender; objMessage.To = Recipient; objMessage.HtmlBody = Body; if(ValType(Attachment) != V_UNDEF) objMessage.AddAttachment(Attachment); end; objMessage.configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")="192.168.0.200"; objMessage.configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25; objMessage.configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing")=2; objMessage.configuration.fields.update; objMessage.Send; end; /* Example SendLetter("sokolov", // Addr_From "sokolov, sokol", // Addr_To "Тема письма", // Subject "Тело письма", // Text "D:\\RSBANK\\OBJ1\\postie.exe"); // Attached File */
>> ОтветитьПутей действительно много, каким пойти решает каждый сам ( EpBuLaT 28.12.2007 10:51 )
0(0)возможно действительно сложновато, но мне было просто интересно сделать подобную DLL.
однако и ваш вариант интересен.
>> ОтветитьПохоже, там много лишнего (+) ( sokols 28.12.2007 11:24 )
0(0)RAR архив 170 Кб для узкоспециализированной DLL-ки :-)
Почистить бы... Меня размер неприятно поразил. Чем компилил?
>> Ответить
Даже если считать, что счас CDO доступно везде... ( Иванов Александр 28.12.2007 11:22 )
0(0)Остается вопрос с авторизацией по SMTP. Чего-то я не наблюдаю ее признаков в соответствующем интерфейсе. Но в любом случае я ставил вопрос шире - предлагал автору сделать возможным реализацию произвольного протокола поверх TCP/IP...
>> ОтветитьПроверил насчет авторизации. Работает. Например, почта Яндекса ( sokols 28.12.2007 11:36 )
0(0)Not specified
>> ОтветитьНаверное туплю но как ты проверил авторизацию? ( EpBuLaT 28.12.2007 12:09 )
0(0)Not specified
>> ОтветитьSMTP-сервер Яндекса требует авторизации, а я просто смог отправить через него письмо ( sokols 28.12.2007 12:37 )
0(0)Not specified
>> ОтветитьСервер яндекса умеет работать с авторизацией, но она там не обязательна... ( Иванов Александр 28.12.2007 13:13 )
0(0)Также как на многих других бесплатных серверах. Я более плотно работаю с mail.ru, так вот там невозможно без авторизации послать письмо на чужой SMTP сервер. То есть он так принимает только письма к своим пользователям. Так что при таком подходе придется для каждого письма определять адрес родного SMTP сервера и обращаться к нему. Несколько неудобно на мой взгляд. Да и алгоритм определения адреса кривоват - пробовать добавить mail, smtp и т.п. к доменной части адреса получателя...
>> Ответить
Почта яндекса с авторизацией работает, это понятно. И не только она... ( Иванов Александр 28.12.2007 12:10 )
0(0)Я не помню, чтобы через CDO можно было бы этим управлять. То есть задавать режим авторизации, имя, пароль и т.п. Хотя конечно я не сказать, что прямо вдоль и поперек это самое CDO разобрал, но использовать приходилось. Так авторизацию настраивали на промежуточном сервере. Вот и счас смотрю на описание интерфейсов CDO for NTS library 1.2 и не вижу ниче. Может конечно более новое умеет...
>> Ответитьможет, может. у меня отсылаются письма с предвартельной авторизацией через CDO (-) ( Eugene Korolev 30.12.2007 13:27 )
0(0)Not specified
>> Ответить
Насчет расширения, ( EpBuLaT 28.12.2007 12:12 )
0(0)я уже набросал обертку копонента TPowerSock для RSL запихал в эту же dlm-ку
но что то не очень у меня получается протестить
а как положить в примеры вместо старого архива?
>> ОтветитьОбязательно в обертку вытащите select... ( Иванов Александр 28.12.2007 12:20 )
0(0)Когда время будет, я набросаю для примера PLAIN или LOGIN авторизацию, там кроме base64 ниче больше не нада. А вот как в примеры чего положить, я не знаю...
>> Ответитья не слишком силен в этом, ( EpBuLaT 28.12.2007 12:41 )
0(0)можно подсказать или дать ссылку про select..., base64?
>> ОтветитьИмеется в виду функция select сокетов. ( Иванов Александр 28.12.2007 13:00 )
0(0)Позволяет отслеживать события на группе сокетов с ожиданием или без. В RSL без нее будет как без рук... Ну а про алгоритм кодировки base64 тут много писали, помнится я даже пример реализации приводил... Суть в том, что при авторизации к примеру на запрос AUTH PLAIN сервер SMTP шлет ответ с кодом 334 на который надо ответить данными, которые представляют собой имя и пароль пользователя разделенные двоичными нулями и закодированные алгоритмом base64. При LOGIN почти аналогично, тока тут сервер последовательно спрашивает имя и пароль, причем запросы и ответы также кодируются base64. Вот для CRAM и DIGEST MD5 несколько сложнее, там нада MD5 реализовывать. Я для RSL его не делал, только для жабы и ейного скрипта. Перетащить конечно можно, но лениво чего-то. А вообще про авторизацию SMTP читайте RFC2554 ну и там дальше будут ссылки...
>> Ответить