Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [Все]   Вниз
  Печать  
Автор Тема: Трудности написания программы - почтовый клиент  (Прочитано 70336 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 28-02-2005 21:11 » 

Хотелось бы спрсить у тех кто знает, кто с этим сталкивался, кто вообще знаком с сетевым программированием.
Я никогда не писал сетевых приложений, но настала пора начинать (ВУЗ требует). Итак, знаний по сетям никаких, с сетевым программированием не сталкивался, возникает вопрос:
"Сложно-ли написать почтовый клиент (какой-то странный вопрос), что для этого необходимо знать, объем знаний, приблизительное время на изучение". Вспомните, когда вы сами столкнулись впервые с такой проблемой или подобной ей и вспомните что вы читали, что вам помогло, а что нет, сколько времени ушло у вас на изучение и написание. Я понимаю, что мой вопрос (тема) странный, но поймите меня правильно, студент живет от сессии до сессии и продливать сессию по каким-либо причинам желания нет. Хотелось бы подрасчитать свои силы и возможности.
Заранее спасибо за ответы и ждите новых вопросов Улыбаюсь.
Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #1 : 01-03-2005 05:37 » 

Хммм....
Да написать то впринципе не очень сложно Улыбаюсь Зависит многое от того на чём писать будеш. Потребуется хотябы минимальное знание протоколов с которыми будеш работать (ex. POP, IMAP, SMTP). Если писать допустим в с++ билдере, то там, если я не ошибаюсь, есть все нужные компоненты, и поэтому написание клиента не займёт много времени.

ЗЫ. Сам, именно на с++, ничего подобного не писал, но думаю что нет там ничего сложного.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 01-03-2005 16:10 » 

Блин, я балда. Забыл написать на чем собираюсь писать. Писать хочу на Visual C++. Насчет билдера это я не сомневаюсь что там уже есть готовые компоненты, также как и в Дельфи, а ВС++ ничего этого нет.
 Мороз, спасибо за ответ. Жду еще ответов.
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 02-03-2005 07:37 » 

nikedeforest,

ответ сильно зависит от того, что ты хочешь написать.

1. В английской документации mail agent означает и клиентское приложение (mail user agent, MUA), и сервер (собственно mail agent).  Что тебе надо будет писать?

2.  Если клиент, то какой набор функций ты будешь предоставлять пользователю: редактирование почтовых сообщений, прикрепление файлов, просмотр полученной почты, сохранение прикреплённых файлов, шифрование/цифровая подпись?  Какие почтовые протоколы ты собираешься поддерживать: отправка почты SMTP + множество расширений + защищённый SMTP или IMAP; получение почты: POP3 + расширения или IMAP?

3.  Если сервер, то какой набор функций ты собираешься реализовывать?  Просто пересылка почты, почтовый ящик.  Опять же набор протоколов, которые ты будешь поддерживать.  Насколько производительным ты хочешь сервер делать (сколько потоков управления ты хочешь в нём использовать?)

На мой взгляд, проще всего написать почтовый агент -- сервер пересылки почты по протоколу SMTP без расширений.  В протоколе всего несколько команд, можно ограничиться одним потоком (thread) управления.  Чуть более сложно добавить к такому агенту простенький почтовый ящик, например nnmail (письма складываются по-отдельности в каталог на диске).  Дальше можно пойти по пути расширения агента, добавляя в него поддержку различных расширений.  Документация на протокол RFC 2821, http://www.ietf.org/rfc/rfc2821.txt
Есть много открытых реализаций, в которых можно посмотреть идеи -- зrocmail, qmail, exim, sendmail, ssmtp  Есть готовые компоненты/библиотеки, даже в открытом доступе.

Почтовый ящик POP3 тоже не особенно сложно написать.  В протоколе пара десятков команд, трудность могут вызвать только вопросы аутентификации.  Если не делать сложной системы хранения паролей (например, хранить все пароли в файле в нешифрованном виде), то всё более-менее просто.  RFC 1939, http://www.ietf.org/rfc/rfc1939.txt
POP3 сервер должен уметь получать почту по протоколу SMTP (откуда сервер берёт почту, как вы думаете Улыбаюсь ), поэтому SMTP запрограммировать придётся.
Есть много открытых реализаций.

IMAP4 -- гораздо более навороченный протокол, чем SMTP и POP3.  Соответственно, написать такой сервер -- задача более сложная чем сервера SMTP и POP3.  Коме того, у IMAP есть масса расширений и дополнительных фич, сильная система аутентификации, поэтому я бы рекомендовал в студенческой работе с этим протоколом не связываться.  RFC 3501, http://www.ietf.org/rfc/rfc3501.txt

Но всё это ИМХО цветочки по сравнению с пользовательскими агентами.  С одной стороны, пользовательский агент должен предоставлять богатый набор услуг пользователю (см. выше).  С другой стороны, агент должен уметь собирать и разбирать почтовые сообщения, то есть работать с почтовыми заголовками и MIME (Multipurpose Internet Mail Extensions).  Базовая документация по MIME RFC 2045 http://www.ietf.org/rfc/rfc2045.txt, и постоянно публикуются расширения MIME и уточнения.

Итог: я бы рекомендовал написать простенький SMTP/POP3 сервер с минимальным набором фич.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 02-03-2005 17:00 » 

npak,  я в принципе об этом и думаю, просто отправить письмо и получить все письма которые хранятся на ящике. Больше никаких фнукций.
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 03-03-2005 07:35 » 

И всё-таки, сервер или пользовательское приложение?
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 04-03-2005 03:58 » 

Какие функции в данном вопросе принадлежат серверу, а какие пользовательскому риложению?
 Я так подразумеваю, что все-таки пользовательское приложение, хотя не уверен. ТНЕ ВАТ чем являетя? Задача написать ТНЕ ВАТ, который только снимает почту с ящика и отправлфяет почту, без всяких наворотов.
Ну как говороится, что знал, то  сказал. 
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 04-03-2005 09:54 » 

The bat -- пользовательское приложение.

Тогда надо освоить отправку по SMTP, получение по pop, конструирование и разбор писем (MIME) и прикрутить к этому пользовательский интерфейс.

Самое сложное -- работа с письмами.  Кодирование заголовков и тела письма, разбор адресов, формирование заголовков, добавление и удаление прикреплённых файлов.  С технической точки зрения не очень  то и сложно, только много доков перерыть придётся.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 04-03-2005 19:19 » 

Да уж. Я  так думаю не стоит этим заниматься в учебный процесс, лучше как-нибудь для себя это сделаю, а не для зачета.
Спасибо за ответы.
зы: когда буду делать (нескоро, в какие - нибудь длинные праздники) будет куча вопросов по этому поводу, готовьтесь Улыбаюсь.
Записан

ещё один вопрос ...
Alf
Гость
« Ответ #9 : 04-03-2005 21:37 » 

Запоздалый такой вопрос.

Сия программа пишется для достижения конечного результата, или тут сам процесс важен?

Если процесс ради процесса, тогда имеет смысл поднимать RFC, реализовывать самостоятельно протоколы (делая вид, что за десяток-другой лет существования электронной почты нникто это работу еще не проделал) и т.д. Конечно, это интересно, познавательно, дает реальные навыки программирования.

Если задача - получить работающего почтового клиента в среде Windows, я бы рекомендовал не тратить времени на изобретение колеса и воспользоваться стандартным почтовым интерфейсом от Microsoft - MAPI (Mail API). Он прост (особенно его упрощенная версия Simple MAPI), хорошо документирован (у меня на полке стоит книга "Основы MAPI" от Microsoft Press) и стандартен. Когда у меня возникала необходимость встроить почтового клиента в прикладную программу (при создании роботов рассылки и клиентов, собирающих потом отправленную информацию), я им пользовался без затруднений.

Все основные функции (отправить письмо, получить, вложить вайл/извлечь вложение и т.д.) там реализованы. Более того, если есть доступ к серверу Microsoft Exchange, эта же программа сможет извлечь всю выгоду от работы с ним.

Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 04-03-2005 23:47 » 

Я вообще-то всегда как делаю, сначало программирование ради результата, а затем уже начинается познавательный процесс, капание в глубь, если можно так выразиться. Поэтому для начала получается с помощью MAPI, а затем видно будет. Но я про MAPI никогда не слышал, следовательно и литературы у меня нет.
Но это надо посмотреть,  поискать, поспрашивать.   Спасибо Alf.
зы: ссылку никто не подскажет на что-нибудь по MAPI, но желательно на русском языке.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #11 : 05-03-2005 05:44 » 

Ради процесса и познавания протоколов что-то подробное я и писал, но до конца не довел Улыбаюсь времени на процесс не хватило.
А вот МАПИ и все стандартные распространенные вещи я обычно ищу в Яндексе и Гугле.
Там вполне нормльные вещи попадаются - более того, если узнать хотябы одну функцию из набора API потом легко найти ее в MSDN и там уже смотреть все остальное в рубрике...
http://msdn.microsoft.com
Записан

А птичку нашу прошу не обижать!!!
Alf
Гость
« Ответ #12 : 05-03-2005 07:32 » 

Вот здесь можно найти информацию о MAPI: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/exchanchor/htms/msexchsvr_mapi.asp

В печатном виде рекомендую: http://www.bookland.ru/book946919.htm

Правда, говорят, что во всех их магазинах закончилась... Но может, где завалялась.

P.S. Прошу прощения, если ввел кого в заблуждение. MAPI - это, конечно же, Messaging API, а не Mail. Впрочем, принципиально это дела не меняет, поскольку почта - частный случай сообщения.
« Последнее редактирование: 05-03-2005 07:35 от Alf » Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 08-03-2005 11:31 » 

А на русском языке не знаете где можно найти инфу? А то с иностранными языками что-то не очень.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #14 : 08-03-2005 11:36 » 

Ты знаешь - был только 1 случай когда Яндекс не нашел мне инфу на русском - когда  копал распознавание образов. Вопрос оказался слишком сложным и то, была часть инфы.

Поиск в Яндексе на MAPI - даст свои результаты...
http://www.microsoft.ru/offext/documents/internet/details.aspx?id=219&cat=18 вот тут есть примеры программ от мелкомягких.
http://www.firststeps.ru/mfc/steps/r.php?194
http://rusproject.narod.ru/article/mapi.htm

Ищите и обрящете Улыбаюсь

Кстати - как наказангие за неумение пользоваться поиском Улыбаюсь прими задание - статья "Как я изучал MAPI" за тобой Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 08-03-2005 12:39 » 

Дык, сначала надо изучить этот MAPI, потом статьи писать, но вообще-то я бы с удовольствием попробовал и попробую просто придется подождать. ОК?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 08-03-2005 12:41 » 

Гром, спасибо за ссылки!
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 11-03-2005 12:31 » 

Почитал про MAPI немножко и возник такой естественный и немаловажный для меня вопрос. Мне кажется или так на самом деле и есть, что MAPI соединяет приложение с почтовым клиентом, т.е. если на компьютере не установлен почтовый клиент, то проиложение использующее MAPI не сможет работать с почтой?
Записан

ещё один вопрос ...
Alf
Гость
« Ответ #18 : 11-03-2005 13:01 » 

Совершенно верно.

Хотя это ограничение, на мой взгляд, не столь критично, ведь Outlook Express входит в поставку Windows.

Кстати, есть сильное подозрение, что The Bat не поддерживает MAPI (точно не скажу, поскольку не любитель и не знаток этого продукта, но очень на то похоже).
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 11-03-2005 14:06 » 

Тогда это не совсем то, что мне нужно. Моя задача все-таки написать почтовый клиент, т.е программа должна автономно работать с почтой. К сожалению я так понял не получится легкого пути. Я даже не знаю с чего начать изучать этот момент, т.к. никогда не писал сетевых приложений. С чего начать?
Цитата
Хотя это ограничение, на мой взгляд, не столь критично, ведь Outlook Express входит в поставку Windows.
пользователь может и не устанавливать его, т.е. сделать выборочную установку Винды.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 11-03-2005 14:57 » 

Цитата
Итог: я бы рекомендовал написать простенький SMTP/POP3 сервер с минимальным набором фич.
Это то что надо. Нашел инфу по протоколам smtp и pop3. Там различный набор команд. Я еще толком не читал. Но у меня такой вопрос: как испорльзовать этот набор команд. Их надо вставлять в какую-нибудь функцию (типо того как  sql команды вставляются в функцию mysql_query в РНР)? И еще вопрос, нужно ли знание сокетов?
Цитата
Цитата
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 11-03-2005 16:08 » 

Судя по предыдущим постам, ты хотел делать читалку -- что-то вроде Outlook Express или The Bat. Но сервер -- не читалка, сервер отсылалка Улыбаюсь

Протоколы работают через соединение TCP.  Например, при отправке почты через SMTP сервер клиент подсоединяется на порт 25 сервера и посылает текстовые строки, оканчивающиеся символами новой строки и перевода каретки (или наоборот? не помню).

Если не пользовался сокетами, то поищи в сети бесплатные библиотеки для работы с протоколами. Есть библиотеки, которые прячут сетевое нутро и текстовый протокол за обычными вызовами функций.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 11-03-2005 16:12 » 

Мне нужно чтобы и читалка была  и отсылалка, т.е моя программа должна получить почту с ящика и также уметь отправлять почту какому-либо получателю.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 11-03-2005 16:20 » 

По поводу порта, то я прочитал на каком-то форуме что нужно коннектиться к 110 порту.
Подтверди или опровергни плз.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #24 : 11-03-2005 17:29 » 

Используй сокеты на нужные порты и работай с протоколом как бегущим поверх сокетов.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 12-03-2005 00:38 » 

Блин, начитавшись литературы (пускай не достаточно для аса, но для первого шага пойдет) надо ее как-то структуирвать. Во-первых читал я о том, как с помощью сокетов создать сервер и клиент, соединить клиент и сервер и послать/получить догадайтесь какую фразу, правильно Hello World Улыбаюсь. Но есть некоторые сомнения и неясности в моих мелких познаниях, которыми хотелось бы поделиться и решить их.
Вообще-то можно, я представлю алгоритм полу-словесный, а вы (люди добрые) меня подкорректируете:
Для того чтобы присоединиться к SMTP-серверу  и отправить письмо :

Код:
//создаю эземпляр
CClientSocket *pSocket;
pSocket=new CClientSocket();
pSocket->Create();

//Соединяюсь, при этом указываю ip-адрес и порт (насколько я понял порт 25 )
pSocket->Connect(ip,port);

Вопрос раз, мне ведь нужно (как я понимаю) вместо ip-адреса, адрес типа mail.smtp.ru, можно ли его загонять вместо ip-адреса?
После того, как соединение установлено, я должен послать SMTP - серверу любое число и еще что-то, пока не об этом. Так вот, чтобы послать что-нибудь, я так понял мне надо использовать

Код:
pSocket->send("HELLO",5)//сообщение и его длина

Для приема сообщения я должен

Код:
//Слушаем
pSocket->Listen();
//для получения я делаю так

char mes[1000];
int kol=Receive(recstr,1000);
mes[kol]='\0';
MessageBox(NULL,mes,mes,MB_OK);
//как я думаю врезультате этих операций я смогу получать сообщения от SMTP-сервера, я прав?

Продолжаю. В случае если все то что я написал выше верно то вот такой вопрос:
как же мне узнать когда именно пришло сообщение и получить его, т.е. я послал сообщение Серверу и должен сразу врубить функцию слушать, но а как я узнаю когда мне можно забирать сообщение, т.е. когда вызывать Receive?

Но пока все. Пока потому что я толком не разбирался что посылать серверу и что от него получать, как войду в этот лес, так думаю еще вопросы появятся. Но очень надеюсь, что к тому времени у меня не будет вопросов связанных с тем о чем я писал выше. Помогите мне разобраться и не скупитесь на комментарии, а то до меня может не дойти Ага.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #26 : 12-03-2005 06:03 » 

Вот:
https://club.shelek.ru/viewart.php?id=35
https://club.shelek.ru/viewart.php?id=36
https://club.shelek.ru/viewart.php?id=37
https://club.shelek.ru/viewart.php?id=41
https://club.shelek.ru/viewart.php?id=153

Эти статьи у нас на сайте лежат с самого его основания.
В них детально описан процес коннекта. Пересылки и приема информации с помощью нормальных сокетов без использования костыликов от MFC.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 12-03-2005 06:43 » 

Это на чистом API? Я так понимаю?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 12-03-2005 06:46 » 

А насчет костыликов от MFC, то просто их вроде изуцчать поменьше да и сними чуть попроще, но раз так то будем и winsock смотреть
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #29 : 12-03-2005 06:55 » 

Все таки хотелось узнать, если писать, используя CSocket, то правильно я хоть мыслил или я абсолютно заблуждался.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #30 : 12-03-2005 06:57 » 

Почти... Есть несколько соображений - которые я бы тебе мог высказать, но просто я бы хотел, что бы ты опирался на берклиевсие сокеты - тогда у тебя не будет непониания происходящего.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 12-03-2005 07:24 » 

Мысли то немного в голове формируются, но тогда начинаю изучать winsock, прямо сейчас (хотя возможность была еще вчера, но подумал что МФЦ поможет).
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #32 : 12-03-2005 07:39 » 

MFC - даст основу - но не даст понимания  TCP/IP
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 12-03-2005 17:47 » 

Я тут кое-чего уже накатал, и по-моему мнению должно было хотя бы соединение произойти, но почему-то нет вот вырезка кода
Код:
DWORD WINAPI NetThread(LPVOID lpParam)
{

SOCKET sClient;
// char szBuffer[1024];
int ret;//,i;
struct sockaddr_in server;
struct hostent *host=NULL;
char szServerName[1024], szMessage[1024];

        strcpy(szMessage,"Get");
strcpy(szServerName,"smtp.mail.ru");

 //Создание сокета
 sClient=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
 if (sClient==INVALID_SOCKET)
 {
 MessageBox(0,"Can't create socket","ERROR",0);
 return 1;
 }

               //Заполнение структуры с адресом сервера и номером порта
                server.sin_family=AF_INET;
    server.sin_port=htons(25);
                server.sin_addr.s_addr=inet_addr(szServerName);

   //Если указано имя, то перевод в IP
   if(server.sin_addr.s_addr==INADDR_NONE)
   {
   host=gethostbyname(szServerName);
      if(host==NULL)
  {
  MessageBox(0,"Unable to resolve server","ERROR",0);
  return 1;
  }
   CopyMemory(&server.sin_addr,host->h_addr_list[0],host->h_length);
   }

              //Соединение с сервером
              if(connect(sClient,(struct sockaddr*)&server,sizeof(server))==SOCKET_ERROR)
  {
  MessageBox(0,"connect failed","ERROR",0);
  return 1;
  }
Выводится сообщение "connect failed" (в коде самое последнее). Почему? Я думал, что хотя бы соединение произойдет.
До этого этот клиент нормально соединялся с сервером (написанным мною) когда я забивал 127.0.0.1, думал, что теперь должно прокатить и с мэйлом.
« Последнее редактирование: 20-12-2007 16:11 от Алексей1153++ » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #34 : 12-03-2005 18:11 » 

По локадке пробовал соединить свой сервер и свой клиент, все прокатило. Но клиент мой не хочет соединяться к примеру с www.tamb.ru-это провайдер в Тамбовской области.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #35 : 12-03-2005 19:58 » 

Вызови после connect WSAGetLastError... поймешь что за ошибку он возвращает.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 13-03-2005 08:35 » 

Щас попробую. Но пока такой вопрос. Как я понимаю соединение с сервером что по локалке что через интернет ничем  не отличается (в смысле программирования), я прав?
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #37 : 13-03-2005 09:00 » 

Прав абсолютно.
Только тайм аутом отличается - по локалке либо в 127.0.0.1 время всегда очень маленькое - ответ приходит практически мгновенно, в реальности это не так.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 13-03-2005 10:11 » 

Коннект появился, соединяюсь с smtp.mail.ru. Теперь проблема -  понять друг друга.
Вот что я делаю, в надаежде что будет все работать и письмо уйдет, но что-то не так.
Код:
//отправка и прием данных
strcpy(szMessage,"MAIL FROM:<nike99@mail.ru>");
 ret=send(sClient,szMessage,sizeof(szMessage),0);
if(ret==SOCKET_ERROR)
     {
MessageBox(0,"Can't send message","ERROR",0);
return 1;
}
      Sleep(1000);

   char RecvBuff[1024];   
     recvfunc(sClient,RecvBuff);
// recvfunc(sClient,RecvBuff);
//------------------------------------//
  //////////
strcpy(szMessage,"RCPT TO:nikedeforest@bk.ru");
  ret=send(sClient,szMessage,sizeof(szMessage),0);
   if(ret==SOCKET_ERROR)
     {
MessageBox(0,"Can't send message","ERROR",0);
return 1;
}
  recvfunc(sClient,RecvBuff);
  /////////
     strcpy(szMessage,"DATA");
  ret=send(sClient,szMessage,sizeof(szMessage),0);
   if(ret==SOCKET_ERROR)
     {
MessageBox(0,"Can't send message","ERROR",0);
return 1;
}
  recvfunc(sClient,RecvBuff);
  ///////////////////
      strcpy(szMessage,"HELLO NIKEDEFOREST");
  ret=send(sClient,szMessage,sizeof(szMessage),0);
  if(ret==SOCKET_ERROR)
     {
MessageBox(0,"Can't send message","ERROR",0);
return 1;
}
  // recvfunc(sClient,RecvBuff);
  /////////////////////
       strcpy(szMessage,".");
  ret=send(sClient,szMessage,sizeof(szMessage),0);
  recvfunc(sClient,RecvBuff);
//--------------------------------------;;
recvfunc()-этог для того чтобы получать сообщения от сервера, проблеме не в ней.
« Последнее редактирование: 20-12-2007 16:13 от Алексей1153++ » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #39 : 13-03-2005 10:30 » 

Cтранно, но когда я посылаю серверу первое сообщение
Код:
strcpy(szMessage,"MAIL FROM:<nike99@mail.ru>"); 
ret=send(sClient,szMessage,sizeof(szMessage),0);
То от сервера в ответ получаю
Цитата
220mmmmmmmmmmmmmmmmm MAIL FROM:<nike99@mail.ru>
А должен получить 250 OK. Интересно, что значит это 220.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #40 : 13-03-2005 10:30 » 

Смотри в описание протокола SMTP как там формируется пакет - принимай код возврата сервера - он вернет тебе ошибку уже SMTP протокола...
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #41 : 13-03-2005 10:34 » 

Цитата
принимай код возврата сервера - он вернет тебе ошибку уже SMTP протокола...
А я разве не это делаю?

Цитата
Смотри в описание протокола SMTP как там формируется пакет
Да я нашел какую-то статейку по этому делу и посылаю то что там написано, в том же порядке.
Там написано, посылайте MAIL FROM:<> и получите в ответ 250 OK,  но у меня 220?!
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #42 : 13-03-2005 11:28 » 

Вот что мне шлет сервер:
Цитата
220 mail.ru ESMTP Sun 13 Mar 2005 14:21:04 + 0300
500 unrecognized command
MAIL FROM: nike99@mail.ru
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #43 : 13-03-2005 11:35 » 

http://book.itep.ru/4/44/smtp4414.htm

А у тебя повидимому комманда не проходит...
Посмотри в дебаге что ты посылаешь и выложи здесь, возможно посылаешь ты не то что должен, а иное...
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #44 : 13-03-2005 12:25 » 

Интересно как я так делаю
strcpy(szMessage,"Hello World");
то в какой кодировке записано в szMessage Hello World, а то в одной статье написано что нужна толи ANSI, толи ASCII кодировка, сейчас не помню.

Гром, я таким образом отправляю сообщение:
Код:
char szMessage[1024];
strcpy(szMessage,"MAIL FROM:<nike99@mail.ru> \n");
ret=send(sClient,szMessage,sizeof(szMessage),0);
в szMessage содержится то что записано и в конце "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM".
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #45 : 13-03-2005 12:42 » 

Ну дык и пню понятно.
Строка должна заканчиваться чем = 0.
А ты делаешь что send sizeof а sizeof szMessage вернет что??? 1024 Гы...
Код:
char szMessage[1024];
strcpy(szMessage,"MAIL FROM:<nike99@mail.ru> \n");
ret=send(sClient,szMessage,sizeof(szMessage),0);

Добавь вторую строку перед strcopy
Код:
memset(szMessage,0,sizeof(szMessage));
и не будет MMMMMMMMMMMMMMMMMMMMM
и вместо sizeof в send сделай strlen+1
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 13-03-2005 13:17 » 

Ты думаешь сервер не распознает команду из-за этих MMMMMMMMMMMMMMMMMMMMMMMMM.
Я просто в статье посмотрел и поставил \n, который идет перед МММММММММММММММММ, а сервер я так понял считываетдо \n.
Но кстати убрал эти ММММММММММММММММММ, не фига не помогает.
Уже даже не знаю с чем экспериментировать.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #47 : 13-03-2005 13:20 » 

Гром, а ты сегодня за весь Шелек отдуваешься ?Ага. Я в том смысле, что по воскресеньям здесь никого не увидишь и я дико удивился сегодня когда увидел ответ на свой пост, оставленный вчера.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #48 : 13-03-2005 13:55 » 

МММММММММ мешают 100% но это не значит что это один только баг.
У тебя похоже проблема с концом строки.
Я честно говоря не помню зачем в конце /n но если в протоколе написано что нужнперевод строки то ставь не \n а \r\n это будет правильнее. Думаю в этом тоже могет быть проблема.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #49 : 13-03-2005 14:35 » 

Кажется первую команду сервер одобряет, по крайней мере, вот что он выдает (в статье правда написано, что он другое должен выдавать)
Выдача:
220 mail.ru ESMTP Sun 13 Mar 2005 17:32:15 +0300
550 HELO or EHLO required
А дальше (на следующие команды):
500 unrecognized command.
Узнать бы наверняка нравится ли ему первая команда и почему ему вообще не нравятся мои команды. Кстати поставил \r где ты советовал, никаких изменений не было.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #50 : 13-03-2005 14:39 » 

Пишешь в Виндовс студии??? Выложи проект в архиве здесь - я заберу посмотрю...
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #51 : 13-03-2005 19:05 » 

Пишу на Visual C++, а не в VS, но я думаю разницы нет, поэтому кидаю проект. Кстати smtp.tamb.ru на первую команду дал мне ОК, на вторую еще ничего не дал, сейчас буду разбираться.

* TCPClient.rar (14.31 Кб - загружено 701 раз.)
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #52 : 13-03-2005 20:49 » 

Посмотрел на твой код.
Обрати внимание на след:
Цитата
220 dxmint.cern.ch sendmail ready at sun, 9 jul 1995 11:13:57 +0200 (связь установлена, код отклика 220 является положительным)

EHLO dxmint.cern.ch
 (поддерживает ли сервер расширение mime?)
 
500 command unrecognized
 (не поддерживает)
 
HELO crnvma.cern.ch
 (команда выхода на конкретный сервер)
 


250 dxmint.cern.ch hello crnvma.cern.ch, pleased to meet you (отклик 250 также является положительным)
mail from:<> (так как на моей PC нет резидентной почтовой программы, я не указываю обратного адреса)

250 <>... sender ok
 (команда прошла успешно)
 
RCPT TO: ysemenov@cernvm.cern.ch
 (указываем адрес места назначения)
 


250 ... recipient ok

DATA
 (начало ввода текста сообщения)
 
nu-i-nu...
 (текст сообщения)
 
.
 (знак конца сообщения)
 
QUIT
 (прерывание или завершение процедуры)
HELO crnvma.cern.ch
(команда выхода на конкретный сервер) - эта команда у тебя отсутствует.
Второе...
У тебя код
ret=send(sClient,szMessage,strlen(szMessage)+1,0);
ret=send(sClient,szMessage,strlen(szMessage),0);
ЗАЧЕМ???
У тебя ошибка посланной длины - лишний симовл из буфера все рано закидываешь?
Это я тебе дурень сам посоветовал - идиотина.+1 это если последний 0 надо слать - а тебе не надо....
« Последнее редактирование: 13-03-2005 21:01 от Гром » Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #53 : 13-03-2005 21:17 » 

Цитата
HELO crnvma.cern.ch
(команда выхода на конкретный сервер) - эта команда у тебя отсутствует.
 
Блин,  в другой статье об этом ни слова, я подумал, что необязательно это посылать, видать явный промах.
По поводу лишней длины, то я так думаю это особо не влияет, т.к. на первое сообщение (MAIL FROM) нормальный отклик, значит и проблемы по идеи нет.
Я вот еще о чем подумал (по поводу HELO), когда я подсоединялся к smtp.mail.ru, то она еще что-то писала про HELO (видно требовала команду). Когда же конектился к smtp.tamb.ru, то о HELO ообще не упоминалось. Странно как-то.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #54 : 13-03-2005 21:48 » 

Нет влияет... Я проверил - именно после убранного +1 прошла команда HELO ранее не проходившая.
Записан

А птичку нашу прошу не обижать!!!
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #55 : 13-03-2005 21:49 » 

Да и не забудь что любой сервер требует аутентификацию клиента для послыки почты.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #56 : 13-03-2005 22:28 » 

Разве для SMTP нужна аутентификация, я думал только для РОР3. Надо будет поробно разобраться с этим. В статье на которую ты меня навел об этом вроде подробно написано.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #57 : 13-03-2005 22:31 » 

Есть - причем как и при POP3 она бывает обязательная бывает необязательная - зависит от настройки сервера.
У нас например есть в обязательном порядке.
Так чта...
Записан

А птичку нашу прошу не обижать!!!
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #58 : 14-03-2005 06:13 » 

В протоколе SMTP изначально не было аутентификации клиента.  Аутентификация добавлена как расширение.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #59 : 14-03-2005 16:23 » 

Цитата
В протоколе SMTP изначально не было аутентификации клиента.  Аутентификация добавлена как расширение.
Она обязательно.

Вот такой вопрос, кто-нибудь знает как пользоваться программой telnet (поставляется вместе с виндой, т.е. наберите в выполнить и она запустится), а то полезная штука, а я не могу подключится к smtp.mail.ru
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #60 : 14-03-2005 16:39 » 

telnet Enter
open smtp.mail.ru 25 Enter
HELO smtp.mail.ru Enter
и т.д. только отослать ты не сможешь там не передастся двойной перевод строки не симитируется.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #61 : 14-03-2005 17:00 » 

Это ты так из консоли запускал? А то вроде когда в выполнить набираешь, там виндовское окошко выскакивает, сверху меню "подключение"->"удаленная система", затем там надо написать к какому серверу коннектишься (я пишу smtp.mail.ru), затем порт, но туда вписать ничего нельзя а можно выбрать из следующих telnet, echo, daytime , chargen. и затем какой-то тип терминала, тоже надо что-то выбрать.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #62 : 14-03-2005 17:03 » 

Кстати и в консоле набираешь, тоже выскакивает виндовское окошко. Для справки, сейчас работаю в Win9x, может в 2000 по-другому, перезагружусь посмотрю
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #63 : 14-03-2005 17:59 » 

Люди успешно пользовались telnet, почему мне не судьба?
Я набрал open smtp.mail.ru 25 Enter, произошел коннект, а теперь я больше ничего набрать не могу, реакция только на Enter. Что делать?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #64 : 14-03-2005 18:03 » 

Понял. Работать можно продолжать, просто не отображается то что ты напечатал. Интересный интерфейс Улыбаюсь
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #65 : 14-03-2005 18:11 » 

Это у тебя локальное эхо выставить надо в настройках.
Честно говоря не помню где.
В 2000 и ХР все работает из консоли.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #66 : 15-03-2005 03:54 » 

На телнете потренировался команды отсылать к сереверу и вот какой результат.
То что я посылал со знаком С: , то что сервес со знаком S:.

1)C: open smtp.mail.ru 25
2)S: mail.ru ESMTP Tue, 15 Mar 2005 06.35.12
3)C: EHLO jgm.mail.ru
4)S: 250-mx1.mail.ru Hello jgm.mail.ru [213.135.143.6]
  S: 250-size 10485760
  S: 250-8BITMIME
  S: 250-AUTH PLAIN LOGIN
  S: 250-PIPELINING
5)C: AUTH PLAIN
6)S: 334

А вот дальше я не знаю что посылать, что не посылал, все не то.
Я не совсем понял что в третьей строке за jgm.mail.ru , но прокатило.
Также не понятно что мне посылать дальше и непонятно мне то что они сделали в статье с BASE64, они ее меняли каким-то образом или это просто набор случайных символов? 
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #67 : 15-03-2005 14:54 » 

Лед тронулся дамы и господа. На шаге (5) не надо писать этот AUTH PLAIN и прочую лабуду дальнейшую, типа BASE64, на шаге (5) надо писать MAIL FROM:<> (наконец-то). Короче с помощью telnet я отправил себе письмо и оно дошло. (УРА товарищи). Фу-у-у-у. Остальные тонкости связанные с аутентификацией можно по позже разобрать, главное что самое важное найдено, а исключения это уж потом. Единственное что меня разочаровало - это информация о том, что настройки СМТП могут очень сильно отличаться у разных серверов (это я уже заметил на примере smtp. tamb.ru и smtp.mail.ru).  Вопрос такой возник: хостинги предоставляют информацию об этих настройках? Если да, то в каком виде, т.е. писать запрос в службу поддержки или в инете где нибудь выкладывается?
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #68 : 15-03-2005 15:14 » 

Поздравлябля!!!!

Насчет разных настроек - это ты просто глянь какие возможности коннекта предоставляет стандартный клиент почтыв, и сделай выбор таковых.
Т.е. обычно клиентская программка настраивается на нужное пользователем в зависимости от настроек сервера, клиентом. Человеком тобишь.
А ты должОн предоставить ему необходимый инстрУмент.!!!
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #69 : 15-03-2005 15:58 » 

Через свою прогу тоже письма отправил и они дошли. Современем опять появятся какие-нибудь мелкие вопросики, связанные уже с улучшением, но это потом.
Гром спасибо тебе отдельное за то что помогал  в эти трудные для моей головы минуты.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #70 : 15-03-2005 16:41 » 

Когда есть время всегда пожалста!!!
Очень рад...
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #71 : 16-03-2005 15:57 » 

В The Bat'e (да и не только) можно к письмам прикреплять файлы. Эти файлы тоже через СМТП пересылаются? Если да, то как? Я предполагаю (я этот вопрос еще вообще не изучал, но осознаю его неизбежность ) что файл считывается по байтно и пересылается, но интересно как он с сообщением не переплетается. Но мне кажется  мое предположение сверх бредовое - это мысли вслух, так сказать. 
« Последнее редактирование: 20-12-2007 14:50 от Алексей1153++ » Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #72 : 16-03-2005 16:55 » 

Способ пересылки называется MIME attachment.
MIME - имеется в виде API и сам по себе тоже достаточно не сложен - это способ кодирования.
Есть насколько я знаю разные методы передачи, но я знаю что есть метод передачи в теле письма в виде отделенного заголовком раздела письма в MIME кодировке.
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #73 : 16-03-2005 17:42 » 

А все понял, про MIME слышал (что такая существует Улыбаюсь), теперь знаю куда копать. Спасибо.
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #74 : 16-03-2005 18:03 » 

ФАйлы тоже пересылаются через SMTP. Для добавления файла в письмо используют специальный почтовый формат MIME
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: 1 2 3 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines