Ребята пожалуйста помогите с POP3! Мне надо написать ПОП3 клиент, а я никак не могу зарегистрироваться на сервере(ПОП).
В общем вот код на С++ с использованием CSocket, проблема в том, что после отправки ЮЗЕР... мы ждём ответ сервака а, он не приходит. Если найдёте ошибку пасибо вам, а если и вообще поможите и объясните всё, то я вооще на колени упаду, ибо этот клиент — курсовая, и здовать её нао скоро. void CPostView::OnCommandsConnect()
{
// TODO: Add your command handler code here
CPostDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CGad *gad;
char chr[255]="";
Здравствуйте, Аноним, Вы писали:
А>Ребята пожалуйста помогите с POP3! Мне надо написать ПОП3 клиент, а я никак не могу зарегистрироваться на сервере(ПОП). А>В общем вот код на С++ с использованием CSocket, проблема в том, что после отправки ЮЗЕР... мы ждём ответ сервака а, он не приходит. Если найдёте ошибку пасибо вам, а если и вообще поможите и объясните всё, то я вооще на колени упаду, ибо этот клиент — курсовая, и здовать её нао скоро. А>void CPostView::OnCommandsConnect() А> char user[11]="USER joker"; А> char pass[10]="PASS 1988"; А>}
давным давно я этим занимался, там вроде каждая команда должна завершаться последовательностью "\r\n"
Здравствуйте, Аноним, Вы писали:
А>Ребята пожалуйста помогите с POP3! Мне надо написать ПОП3 клиент, а я никак не могу зарегистрироваться на сервере(ПОП). А>В общем вот код на С++ с использованием CSocket, проблема в том, что после отправки ЮЗЕР... мы ждём ответ сервака а, он не приходит. Если найдёте ошибку пасибо вам, а если и вообще поможите и объясните всё, то я вооще на колени упаду, ибо этот клиент — курсовая, и здовать её нао скоро. А>void CPostView::OnCommandsConnect() А>{ А> // TODO: Add your command handler code here А> CPostDoc* pDoc = GetDocument(); А> ASSERT_VALID(pDoc); А> CGad *gad; А> char chr[255]="";
А> char user[11]="USER joker"; А> char pass[10]="PASS 1988"; А> CString s,c; А> CString buf; А> gad=new CGad; gad->>Create(); А> if(gad->Connect("127.0.0.1",25)==TRUE) А> { gad->>Receive(&chr,sizeof(chr),0); А> MessageBox(chr,"SERVER",MB_OK); А> int e=gad->Send(user,sizeof(user),0); А> int r=gad->Receive(&pDoc->chr1,sizeof(pDoc->chr1),0); А> Sleep(1000); А> } А>}
А у Вас POP3 сервер на 25 порту живет? 25 — это больше похоже на SMTP.
И вообще, совет за бесплатно — прежде, чем писать код, разберитесь как вообще все работает. Для этого возмите telnet и попробуйте связаться с сервером с помощью него. Например: > telnet my_pop3_server.com 110
Сервер радостно ответит:
+OK I am a super pop3 server > USER ThisIsMe
+OK need a password
и.т.д.
Да пребудет с тобою сила
Re[2]: ПОМОГИТЕ С ПОП3 пожалуйста
От:
Аноним
Дата:
21.04.05 16:19
Оценка:
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Аноним, Вы писали:
А>>Ребята пожалуйста помогите с POP3! Мне надо написать ПОП3 клиент, а я никак не могу зарегистрироваться на сервере(ПОП). А>>В общем вот код на С++ с использованием CSocket, проблема в том, что после отправки ЮЗЕР... мы ждём ответ сервака а, он не приходит. Если найдёте ошибку пасибо вам, а если и вообще поможите и объясните всё, то я вооще на колени упаду, ибо этот клиент — курсовая, и здовать её нао скоро. А>>void CPostView::OnCommandsConnect() А>>{ А>> // TODO: Add your command handler code here А>> CPostDoc* pDoc = GetDocument(); А>> ASSERT_VALID(pDoc); А>> CGad *gad; А>> char chr[255]="";
А>> char user[11]="USER joker"; А>> char pass[10]="PASS 1988"; А>> CString s,c; А>> CString buf; А>> gad=new CGad; gad->>>Create(); А>> if(gad->Connect("127.0.0.1",25)==TRUE) А>> { gad->>>Receive(&chr,sizeof(chr),0); А>> MessageBox(chr,"SERVER",MB_OK); А>> int e=gad->Send(user,sizeof(user),0); А>> int r=gad->Receive(&pDoc->chr1,sizeof(pDoc->chr1),0); А>> Sleep(1000); А>> } А>>}
TC>А у Вас POP3 сервер на 25 порту живет? 25 — это больше похоже на SMTP.
TC>И вообще, совет за бесплатно — прежде, чем писать код, разберитесь как вообще все работает. Для этого возмите telnet и попробуйте связаться с сервером с помощью него. Например: >> telnet my_pop3_server.com 110 TC>Сервер радостно ответит: TC>+OK I am a super pop3 server >> USER ThisIsMe TC>+OK need a password
TC>и.т.д.
пасибо большое но может вы ещё мне ссылки на какие нибудь учебники кинете?
про 25 порт это ошибка т.к. я просто сокет тестировал (сделался он или нет) на IIS а он всё же SMTP сервер.
да и ещ как мне зная обычный адрес (POP3.mail.ru) epyfnm IP (лучше програмно).
Спасибо огромное.
Здравствуйте, Аноним, Вы писали:
А>пасибо большое но может вы ещё мне ссылки на какие нибудь учебники кинете? А>про 25 порт это ошибка т.к. я просто сокет тестировал (сделался он или нет) на IIS а он всё же SMTP сервер. А>да и ещ как мне зная обычный адрес (POP3.mail.ru) epyfnm IP (лучше програмно). А>Спасибо огромное.
Посибо огромное за ссылки, но у меня тут возник вопрос а точнее много:
Как мне узнать длину письма, именно письма а не всего сообщения?
Как разделить поля (Subjeckt To From Body)
И ещ один маленький: можно ли использовать CString вместо массиа char и если да то как (у меня после команды ресив строка остаётся пустой)
Здравствуйте, Аноним, Вы писали:
А>Ребята пожалуйста помогите с POP3! Мне надо написать ПОП3 клиент, а я никак не могу зарегистрироваться на сервере(ПОП). А>В общем вот код на С++ с использованием CSocket, проблема в том, что после отправки ЮЗЕР... мы ждём ответ сервака а, он не приходит. Если найдёте ошибку пасибо вам, а если и вообще поможите и объясните всё, то я вооще на колени упаду, ибо этот клиент — курсовая, и здовать её нао скоро. А>void CPostView::OnCommandsConnect() А>{ А> // TODO: Add your command handler code here А> CPostDoc* pDoc = GetDocument(); А> ASSERT_VALID(pDoc); А> CGad *gad; А> char chr[255]="";
А> char user[11]="USER joker"; А> char pass[10]="PASS 1988"; А> CString s,c; А> CString buf; А> gad=new CGad; gad->>Create(); А> if(gad->Connect("127.0.0.1",25)==TRUE) А> { gad->>Receive(&chr,sizeof(chr),0); А> MessageBox(chr,"SERVER",MB_OK); А> int e=gad->Send(user,sizeof(user),0); А> int r=gad->Receive(&pDoc->chr1,sizeof(pDoc->chr1),0); А> Sleep(1000); А> } А>}
Во-первых РОР3 идет через 110 порт, а у тебя там 25
Во-вторых у тебя не правильный запрос! Запрос должен заканчиваться парой CRLF (\r\n на C#)
Re[5]: ПОМОГИТЕ С ПОП3 пожалуйста
От:
Аноним
Дата:
23.04.05 11:00
Оценка:
Здравствуйте, alshits1, Вы писали:
A>Здравствуйте, Jax, Вы писали:
A>Посибо огромное за ссылки, но у меня тут возник вопрос а точнее много: A>Как мне узнать длину письма, именно письма а не всего сообщения? A>Как разделить поля (Subjeckt To From Body) A>И ещ один маленький: можно ли использовать CString вместо массиа char и если да то как (у меня после команды ресив строка остаётся пустой)
Про последний — есть метод временно выдать буфер как char*. Иначе — класс не знает, что в него что-то пишут...
Разделить поля — пока идут строки вида ".*: .*" — это поля заголовка, в начале строки — его имя. Дальше — тело.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, alshits1, Вы писали:
A>>Здравствуйте, Jax, Вы писали:
А>Про последний — есть метод временно выдать буфер как char*. Иначе — класс не знает, что в него что-то пишут... А>Разделить поля — пока идут строки вида ".*: .*" — это поля заголовка, в начале строки — его имя. Дальше — тело.
Большое спасибо
У меня есть ещё вопрос: почему у меня после команды сенд юзера от сервера приходит сообщение такое.
Здравствуйте, Аноним, Вы писали:
A>>Здравствуйте, Jax, Вы писали:
А>Про последний — есть метод временно выдать буфер как char*. Иначе — класс не знает, что в него что-то пишут... А>Разделить поля — пока идут строки вида ".*: .*" — это поля заголовка, в начале строки — его имя. Дальше — тело.
Нельзя ли поточнее про разметку. Я watchем в debugere смотрю содержание сообщений сервера и там нет ни точек ни звёздочек. Если не трудно скиньте мне пару ссылок по разметке.
На все вопросы можно найти ответ в предложенных документах...
Итак, открываем и читаем:
Вопрос:
Как разделить поля (Subjeckt To From Body)
Ответ:
Документ RFC 2822:
2.2. Header Fields
Header fields are lines composed of a field name, followed by a colon
(":"), followed by a field body, and terminated by CRLF.
Так же читаем всю секцию посвященную заголовкам, там много интересного! Так же, думаю, будет интересно прочитать несколько разделов в документе RFC 2045 начиная с "3. MIME Header Fields".
Вопрос:
Как мне узнать длину письма, именно письма а не всего сообщения?
Ответ:
А зачем? Ну ладно, один из вариантов. Смотрим, какие команды выполняет POP3 сервер (RFC 1939). Есть команда TOP, которая возвращает заголовок и указанное количество строк тела письма. Также есть команда LIST. Размер_тела_письма = (LIST <msg_num>) — (TOP <msg_num> 0) — 2. Зачем еще отнимать два байта? TOP вместе с заголовком возвращает пустую строку CRLF.
Вопрос:
У меня есть ещё вопрос: почему у меня после команды сенд юзера от сервера приходит сообщение такое.
Ответ:
Возможно ты не читаешь ответ сервера на какую-нибудь команду.
Вопрос:
Нельзя ли поточнее про разметку. Я watchем в debugere смотрю содержание сообщений сервера и там нет ни точек ни звёздочек. Если не трудно скиньте мне пару ссылок по разметке.
Ответ:
Смотри ответ на первый вопрос. Читай документацию!
Про CRLF уже ответили Удачи! А может тебе взять уже готовую реализацию POP3 клиента с с ней разобраться?
Спасибо огромное. Просто очень огромное.
А нет ли у кого готового ПОП3 клиента, может и правда можно разобраться на деле.
Напишите кто-нить ссылку или файл киньте alshits1@yandex.ru
Не смотря на все ваши стпрания у меня всё ещё остались вопросы:
Всё же почему сервер шлёт мне строку где сначала написано ошибка а потом уже OK
"-ERR Unknown command: ""
+OK tmp666@mail.ru maildrop has 1 meesages
"
Это происходит при проверке пароля.
Вот весь код функции:
void CPostView::OnCommandsConnect()
{
// TODO: Add your command handler code here
CPostDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
Здравствуйте, alshits1, Вы писали:
A>Здравствуйте, Jax,
A>Не смотря на все ваши стпрания у меня всё ещё остались вопросы: A>Всё же почему сервер шлёт мне строку где сначала написано ошибка а потом уже OK A>"-ERR Unknown command: "" A>+OK tmp666@mail.ru maildrop has 1 meesages A>" A>Это происходит при проверке пароля. A>Вот весь код функции:
A> char user[]="USER tmp666\r\n"; A> char pass[]="PASS 1988\r\n"; A> char retr[]="RETR 1\r\n"; A> char top[]="TOP 1 10\r\n";
Уже не один раз говорили, что команда должна заканчиваться последовательностью CRLF, т.е. \r\n!
Некоторые POP3 клиенты и не только можно посмотреть здесь.
Здравствуйте, Jax, Вы писали:
Jax>Здравствуйте, alshits1, Вы писали:
A>>Здравствуйте, Jax,
A>>Не смотря на все ваши стпрания у меня всё ещё остались вопросы: A>>Всё же почему сервер шлёт мне строку где сначала написано ошибка а потом уже OK A>>"-ERR Unknown command: "" A>>+OK tmp666@mail.ru maildrop has 1 meesages A>>" A>>Это происходит при проверке пароля. A>>Вот весь код функции:
A>> char user[]="USER tmp666\r\n"; A>> char pass[]="PASS 1988\r\n"; A>> char retr[]="RETR 1\r\n"; A>> char top[]="TOP 1 10\r\n";
Jax>Уже не один раз говорили, что команда должна заканчиваться последовательностью CRLF, т.е. \r\n!
Jax>Некоторые POP3 клиенты и не только можно посмотреть здесь.
Слушай ну я же тоже не совсем тупой (тупой конечно но не очень), раз сказали \r\n то я так и написал но сервак всё равно шлёт эти строки, а потом я уже стал экспериментировать...
Так что проблема не в этом. Если знаешь в чём ещё может быть напиши пожалуйста.
И кроме этого у меня ещё вопрос: как закрыть, заблокировать порт?