Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 04-02-2008 05:50 » |
|
Нужно из своей программы отправить данные (строку текста) на определённый почтовый адрес
как это делается ?
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #1 : 04-02-2008 08:11 » |
|
1. Открываешь сокет - функция socket 2. Создаешь соединение с почтовым сервером - функция connect 3. По протоколу SMTP отправляешь строку аутентификации (для разных почтовых серверов она может отличаться, можешь посмотреть лог-файл своей почтовой программы) функцией send. 4. Вызываешь функцию recv для получения ответа. 5. Получив ответ сервера, анализируешь его (протокол SMTP). Если ошибки не выдается, отправляешь твою строку функцией send.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 04-02-2008 08:45 » |
|
спасибо, попробую, вроде в теории пока всё понятно
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #3 : 04-02-2008 09:42 » |
|
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 04-02-2008 10:03 » |
|
Джон, я так понимаю, намякиваешь на использование класа CMapiMessage ?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #5 : 04-02-2008 10:06 » |
|
Алексей1153++, конечно надо API юзать - MAPI. SMTP - довольно навороченный протокол.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 04-02-2008 10:09 » |
|
так я ж нисколько не против - я просто так с ходу не нашёл ) Щас помацаем CMapiMessage
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #7 : 04-02-2008 10:40 » |
|
Алексей1153++, конечно надо API юзать - MAPI. SMTP - довольно навороченный протокол.
Что уж там такого навороченного, я с ним за 2 часа разобрался. Тем более берешь лог-файл OutLook - вот тебе готовый протокол.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 04-02-2008 10:45 » |
|
zubr, был бы у меня такой лог ))) Да и некогда отлаживать... Ну эт ладно. Джон, нету описания этого класса в msdn - я так понимаю, он кем то левым написан, так вот, кто такие: The To: Recipients The CC: Recipients The BCC Recipients
(только To Recipients понятно)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 04-02-2008 11:01 » |
|
и что задают флажки Resolve Interactive Shared ?
в функции BOOL CMapiSession::Logon(const CString& sProfileName, const CString& sPassword, CWnd* pParentWnd)
что есть ProfileName и какой именно пароль ?
|
|
« Последнее редактирование: 04-02-2008 11:11 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 04-02-2008 11:40 » |
|
Джон, нету описания этого класса в msdn Блииин, как всё запущено... Если бы это был родной класс, я бы наерное ссылку на MSDN дал или? - я так понимаю, он кем то левым написан Строчка "Автор: P.J.Naughter" как-то невольно наталкивает на эту мысль. Смотри тут http://www.naughter.com/ и в коде, это же рабочий проект для примера.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #11 : 04-02-2008 11:43 » |
|
The enclosed zip file contains the source code and a simple test program to exercise all of the functions the classes provide.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 04-02-2008 11:48 » |
|
рабочий пример пытается отправлять через outlook - а нафига мне это ? ))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 04-02-2008 12:15 » |
|
пробую через сокет CString txt;
for(;;) { CAsyncSocket s; if(!s.Create(0,SOCK_STREAM,0))break; s.Connect("smtp.yandex.ru",25);
BYTE p[1000]; s.Receive(p,1000);
txt="HELO yandex.ru"; s.Send((const char*)txt,txt.GetLength());
::memset(p,0,1000); s.Receive(p,1000);
break; }
после коннекта прилетает строка 220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Mon, 4 Feb 2008 15:12:21 +0300 а после посылки "HELO yandex.ru" - тишина , что тут я напортачил опять ?
|
|
« Последнее редактирование: 04-02-2008 12:17 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #14 : 04-02-2008 12:34 » |
|
Алексей1153++, конечно надо API юзать - MAPI. SMTP - довольно навороченный протокол.
Что уж там такого навороченного, я с ним за 2 часа разобрался. Тем более берешь лог-файл OutLook - вот тебе готовый протокол. Логика работы существенно меняется от настроек SMTP-сервера, от поддерживаемых им ф-ий. Потому проще пользоваться API, чем городить свое. Леш, CC - кому слать копию, BCC - тоже самое, но "скрытая копия".
|
|
« Последнее редактирование: 04-02-2008 12:39 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zubr
Гость
|
|
« Ответ #15 : 04-02-2008 18:04 » |
|
Алексей1153++, настрой Outlook, отправь какое нить почтовое сообщение и посмотри, что у него в логе, сразу все проблемы решишь. Вот моя строка аутенфикации при отправке на сервер почтового сообщения с файлом в аттачменте: s:='EHLO 12345'+#13+#10+'AUTH LOGIN'+#13+#10+'rt96ghn='+#13+#10+'c2hnmkjerl=='+ #13+#10+'MAIL FROM:blabla@mail.ru'+#13+#10+'RCPT TO:blabla@tut.by'+#13+#10+ 'DATA'+#13+#10+'From: < blabla@mail.ru>'+#13+#10+'To: < blabla@tut.by>'+#13+#10+ 'subject:Trn'+#13+#10+'MIME-Version: 1.0'+#13+#10; З.Ы. Естественно строка изменена.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 04-02-2008 18:13 » |
|
настройки узнаем, как они выглядят то ? ) Задача, в общем то, такая - когда на путьл приходит сообщение (тревожное) , хозяину объекта должно посылаться смс на телефон. Смс решено отправлять через почтовый сервис оператора (неважно какого - нужные настройки пробьём) . Вот отсюда ноги растут. Класс, который показал Джон, отправляет через outlook - а как без посредника то отправить ? Аттач отправлять не требуется - чисто смс. zubr, завтра попробую. А сейчас вопросик: :='EHLO 12345'
- опечатка или именно EHLO ? А то в мсдн я нашёл именно как HELO (см. код выше) и так я и пытался , может поэтому мне сервер не отвечал ?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #17 : 04-02-2008 18:34 » |
|
Алексей1153++, именно! не ошибка http://cr.yp.to/smtp/client.html
|
|
« Последнее редактирование: 04-02-2008 18:41 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 04-02-2008 18:42 » |
|
понятненько
|
|
« Последнее редактирование: 04-02-2008 18:50 от Алексей1153++ »
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #19 : 04-02-2008 19:11 » |
|
Если надо SMS посылать, то зачем через почту. Можно напрямую через GSM-модем. Или через веб-форму. В аттач выкладываю пример с CodeProject как посылать смс через вебформу, а вообще пошарься на Code Project - уверен, найдешь готовые примеры и отправки почты и отправки напрямую смс через GSM-модем.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #20 : 05-02-2008 05:18 » |
|
zubr, нет, требование - именно через почту
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 05-02-2008 05:55 » |
|
сдвиги кое какие есть, чёть позже отпишусь, а чичас такой вопрос - почему в ответе то 250 smtp6 . yandex . ru , Hello 12345 то 250 smtp7 . yandex . ru , Hello 12345
(а ещё - на месте 12345 что именно нужно ставить ?)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 05-02-2008 06:24 » |
|
zubr, а там, где у тебя написано в примере
'AUTH LOGIN'+#13+#10+'rt96ghn='+#13+#10+'c2hnmkjerl=='+
что куда подставить надо , я так понимаю
rt96ghn - почтовый логин c2hnmkjerl - почтовый пароль ?
пробую подставлять - приходит строка типа
220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Tue, 5 Feb 2008 09:20:41 +0300 250 smtp8.yandex.ru Hello 12345 334 ghfftdxfhbjh 334 khbhfctfchgb 535 Authentication Failed
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #23 : 05-02-2008 07:55 » |
|
что куда подставить надо , я так понимаю
rt96ghn - почтовый логин c2hnmkjerl - почтовый пароль Они зашифрованы. Какой механизм шифрации, честно говоря я не заморачивался, когда делал подобную программку. Просто настроил Outlook, важно в настройках указать создание лог-файла (меню Сервис->Параметры->закладка Обслуживание->чекбокс Почта). Все, что тебе надо будет - увидишь в лог-файле. а ещё - на месте 12345 что именно нужно ставить ? Насколько я помню, что хочешь, никакого значения это не имеет. Вот мой дельфийский код обмена сообщениями с почтовым сервером: s:='EHLO 12345'+#13+#10+'AUTH LOGIN'+#13+#10+'rt96ghn='+#13+#10+'c2hnmkjerl=='+ #13+#10+'MAIL FROM:blabla@mail.ru'+#13+#10+'RCPT TO:blabla@tut.by'+#13+#10+ 'DATA'+#13+#10+'From: <blabla@mail.ru>'+#13+#10+'To: <blabla@tut.by>'+#13+#10+ 'subject:Trn'+#13+#10+'MIME-Version: 1.0'+#13+#10;
bf:=PChar(s); len:=send(sock, @bf^, Length(s), 0); If len<>Length(s) then begin Disconnect(sock); exit; end;
GetMem(buf, 1000); While True do begin ZeroMemory(buf, 1000); recv(sock, @buf^, 1000, 0); s:=string(buf); If s='' then begin FreeMem(buf); Disconnect(sock); exit; end; If Pos('relaying authenticated', s)<>0 then begin break; end; If (Pos('421', s)<>0) or (Pos('450', s)<>0) or (Pos('451', s)<>0) or (Pos('500', s)<>0) or (Pos('501', s)<>0) or (Pos('502', s)<>0) or (Pos('503', s)<>0) or (Pos('504', s)<>0) or (Pos('554', s)<>0) or (Pos('550', s)<>0) or (Pos('553', s)<>0) or (Pos('551', s)<>0) or (Pos('573', s)<>0) then begin FreeMem(buf); Disconnect(sock); exit; end; end; FreeMem(buf);
If not SendFile(filename, sock) then begin Disconnect(sock); exit; end; s:=#13+#10+#13+#10+#13+#10+'.'+#13+#10+'QUIT'; bf:=PChar(s); len:=send(sock, @bf^, Length(s), 0); If len<>Length(s) then begin Disconnect(sock); exit; end;
GetMem(buf, 1000); While True do begin ZeroMemory(buf, 1000); recv(sock, @buf^, 1000, 0); s:=string(buf); If s='' then begin FreeMem(buf); Disconnect(sock); exit; end; If Pos('message accepted for delivery', s)<>0 then begin //MessageBox(0, PChar(filename+' отправлено'), '', MB_OK+MB_ICONERROR); break; end; If (Pos('421', s)<>0) or (Pos('450', s)<>0) or (Pos('451', s)<>0) or (Pos('500', s)<>0) or (Pos('501', s)<>0) or (Pos('502', s)<>0) or (Pos('503', s)<>0) or (Pos('504', s)<>0) or (Pos('554', s)<>0) or (Pos('550', s)<>0) or (Pos('553', s)<>0) or (Pos('551', s)<>0) or (Pos('573', s)<>0) then begin FreeMem(buf); Disconnect(sock); exit; end; end; FreeMem(buf); Disconnect(sock);
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #24 : 05-02-2008 09:02 » |
|
zubr, нету там такой вкладки , хм... Где должен лежать файл лога? настроил я это уё***ще оутлук , попал на 10 метров трафика - а пользы никакой )))
в общем, насколько я понял, осталось только узнать, как шифруется пароль и логин
|
|
« Последнее редактирование: 05-02-2008 09:09 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #25 : 05-02-2008 09:57 » |
|
да, всё дело было в шифрации, поставил the bat! , логи там есть - всё скатал оттуда и отправилось на ура )
Теперь бы узнать, что за алгоритмы используются при шифровании, и везде ли они одинаковые используются ?
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #26 : 05-02-2008 10:14 » |
|
Теперь бы узнать, что за алгоритмы используются при шифровании, и везде ли они одинаковые используются ? Не обязательно. Отправляй письма через свой почтовый сервер, да и все. Не, ну если время есть, то конечно интересно было бы. Поделись инфой тогда, если выяснишь.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #27 : 05-02-2008 10:23 » |
|
Леха, пожалей свое время - пиши на API! Zubr, еще раз покритикую твой подход: 1. EHLO. Сервер может не работать с расширенным протоколом. Он отклонит вход. Надо будет войти еще раз, но с HELO. 2. После EHLO/HELO должна стоять идентификация клиента, а не произвольный текст!!! Для серверов тут ставят их доменное имя, для клиентов - email. 3. Методы аутентификации. Basic _может_ не быть! Также может потребоваться "сперва POP3 логин, потом SMTP отсылка". 4. Существуют и более сложные механизмы, ориентированные на борьбу со спамерами.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zubr
Гость
|
|
« Ответ #28 : 05-02-2008 10:31 » |
|
RXL, так он уже все написал и в принципе свою задачу решил. Решение данной задачи заключается в использовании лога почтовой программы, конечно не универсальное решение, но проблему отправки почты через свой (известный) почтовый сервер решает. Не спорю, через MAPI делать красивее и универсальнее.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #29 : 05-02-2008 10:33 » |
|
RXL, так вот чёта так проще оказалось ) Всего то - открыть сокет и одну строку отправить. Ну а если в апи шифровалка знаешь, где лежит - гавары )
|
|
|
Записан
|
|
|
|
|