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

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

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 » new

Вызови после 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 Кб - загружено 703 раз.)
Записан

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

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
Записан

ещё один вопрос ...
Страниц: 1 [2] 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines