Russian Qt Forum

Qt => Работа с сетью => Тема начата: QtProger от Декабрь 25, 2009, 17:17



Название: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 25, 2009, 17:17
Помогите пожалуйста ! Нужно подключится к POP серверу и узнать количество писем. Как это сделать ? Нужен простой пример.


Название: Re: Как подключится к POP серверу ?
Отправлено: SimpleSunny от Декабрь 25, 2009, 17:34
Посмотреть можно тут (http://sourceforge.net/projects/nlcreator/), но сам код мне не понравился, когда пытался использовать в одном проекте.

А если в общем то QSocket и спецификация на протокол :)


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 25, 2009, 19:11
Я в таком большом проекте не разберусь. Я новичок, мне нужен простой пример.


Название: Re: Как подключится к POP серверу ?
Отправлено: SimpleSunny от Декабрь 25, 2009, 20:00
Там все довольно просто. Найдите классы pop3 (или lpop3), в них и происходит то что Вас интересует.


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 25, 2009, 23:10
Там все довольно просто. Найдите классы pop3 (или lpop3), в них и происходит то что Вас интересует.

Нет таких классов


Название: Re: Как подключится к POP серверу ?
Отправлено: SimpleSunny от Декабрь 26, 2009, 00:13
И всё-таки есть :)


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 26, 2009, 00:24
Спасибо. Буду разбираться


Название: Re: Как подключится к POP серверу ?
Отправлено: crossly от Декабрь 26, 2009, 14:50
Помогите пожалуйста ! Нужно подключится к POP серверу и узнать количество писем. Как это сделать ? Нужен простой пример.

когда то игрался с такими вещами.... начинал с того http://doc.trolltech.com/3.0/mail-example.html (http://doc.trolltech.com/3.0/mail-example.html)... пример для smtp.....

для начала возьми rfc 1939 и telnet.... а потом все станет понятно..... :)


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 26, 2009, 18:04
Не получилось разобраться  :( Покажите пожалуйста простой пример, как подключится к POP3 серверу.


Название: Re: Как подключится к POP серверу ?
Отправлено: crossly от Декабрь 26, 2009, 21:11
подключится просто..... Берем QTcpSocket.... и connectToHost(<pop3 server>,110) его :).... вот и все подключение... далее все сводится к записи команд в сокет и чтение данных из него.. я не зря в предыдущем посте написал об рфц.... там не так много команд.... но не зная их у вас ничего не получится... и я не зря указал telnet.... попробуйте по общаться с почтовым сервером с помощью его..... и вам все станет понятно....


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 26, 2009, 23:30
и я не зря указал telnet.... попробуйте по общаться с почтовым сервером с помощью его..... и вам все станет понятно....

В Винде сделал Пуск=> Выполнить=> telnet pop.mail.ru 110
Дальше написал:
Код:
USER логин
PASS пароль
И подключился к своему ящику ! Здорово ! Действительно, знакомство с Телнетом и rfc1939 все проясняет. В Qt не так как в C++ Билдере, там для POP3 есть отдельный клиент, а в Qt похоже все надо делать вручную


Название: Re: Как подключится к POP серверу ?
Отправлено: crossly от Декабрь 27, 2009, 02:02
не так страшен черт как его малюют... :)


Название: Re: Как подключится к POP серверу ?
Отправлено: lit-uriy от Декабрь 27, 2009, 17:10
>>В Qt не так как в C++ Билдере, там для POP3 есть отдельный клиент, а в Qt похоже все надо делать вручную
как напишешь компонент, выложи его на Qt-apps, чтобы и в Qt был свой компонент.


Название: Re: Как подключится к POP серверу ?
Отправлено: crossly от Декабрь 27, 2009, 21:07
думаю протокол рор3 слишком прост для того что бы удостоить его отдельным классом... :).... и думаю что троли не зря не стали захламлять им qt... :).... но если добавить туда ещё что нибудь для работы с самим письмом, то было бы наверное интересно....


Название: Re: Как подключится к POP серверу ?
Отправлено: merke от Декабрь 28, 2009, 20:22
Давно как то писал поп3 клиент, но переключился на другой проект, вот скидываю ссылку на исходник, там как раз реализовано получение количество писем в ящике, но не до конца реализовано получение самих писем. Держи, разбирайся http://mepke.ucoz.ru/pop.rar (http://mepke.ucoz.ru/pop.rar)


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 28, 2009, 21:08
Спасибо !  :D


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 29, 2009, 15:57
У меня получилось подключиться к серверу, но не получается получить ответ от сервера. Как это сделать ?
Код
C++ (Qt)
#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent)
   : QWidget(parent), ui(new Ui::Widget)
{
   ui->setupUi(this);
   socket = new QTcpSocket(this);
   connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(click_button()));
   connect(socket, SIGNAL(connected()), this, SLOT(show_if_connect()));
}
 
Widget::~Widget()
{
   delete ui;
}
 
void Widget::click_button()
{
  socket->connectToHost("pop.mail.ru", 110);
}
 
void Widget::show_if_connect()
{
   qDebug("Connected");
   socket->write("USER login\r\n");
   socket->write("PASS password\r\n");
   socket->write("STAT\r\n");
   qDebug(socket->readAll()); //не выводит ничего
}


Название: Re: Как подключится к POP серверу ?
Отправлено: BRE от Декабрь 29, 2009, 16:06
Ну так сервер не успевает тебе ответить.  :)
Посмотри на:
bool QAbstractSocket::canReadLine () const
bool QIODevice::waitForReadyRead ( int msecs )
void QIODevice::readyRead ()   [signal]


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 29, 2009, 16:34
Ну так сервер не успевает тебе ответить.  :)

Чтение из сокета засунул в слот, связанный с сигналом readyRead(). Таким образом смог получить ответ от сервера.


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Декабрь 31, 2009, 11:38
Команда:

Код
C++ (Qt)
qDebug(socket->readAll()); //QTcpSocket socket

Выдает мне следующий результат:

Код:
+OK 
+OK Password required for user login
+OK login@mail.ru maildrop has 1430 messages (4953088 octets)
+OK 1430 4953088

Мне нужно только количество писем узнать. Какой командой это можно сделать ? Наверно есть более рациональный способ, чем парсить весь этот текст


Название: Re: Как подключится к POP серверу ?
Отправлено: crossly от Январь 03, 2010, 17:55
правильнее всего обрабатывать ответ на каждую посланную команду ... это избавит тебя от ошибок... (мало ли сервер не доступен, не правильный логин пароль и тд).... примерно так же, как это показано в примере smtp (ссылку давал выше)... + обрабатывать построчно.... т.е. на команду STAT в ответ ты получишь строку +OK 1430 4953088... а далее просто в QString её и split(" ").at(1) количество писем... :)


Название: Re: Как подключится к POP серверу ?
Отправлено: _govorilka от Январь 03, 2010, 21:22
Вот сюда не пробовали заглянуть:
http://labs.trolltech.com/page/Projects/QtMessaging (http://labs.trolltech.com/page/Projects/QtMessaging)
Возможно это то, что Вам нужно.


Название: Re: Как подключится к POP серверу ?
Отправлено: QtProger от Январь 04, 2010, 01:16
правильнее всего обрабатывать ответ на каждую посланную команду ... это избавит тебя от ошибок... (мало ли сервер не доступен, не правильный логин пароль и тд).... примерно так же, как это показано в примере smtp (ссылку давал выше)... + обрабатывать построчно.... т.е. на команду STAT в ответ ты получишь строку +OK 1430 4953088... а далее просто в QString её и split(" ").at(1) количество писем... :)

Получилось.  :D Спасибо


Название: Re: Как подключится к POP серверу ?
Отправлено: serg_hd от Март 30, 2010, 16:40
... + обрабатывать построчно.... т.е. на команду STAT в ответ ты получишь строку +OK 1430 4953088...
КАК это сделать? Команда STAT у меня выполняется в отдельном слоте, но всё равно в ответе - ВСЕ данные вместе с данными результата авторизации, а не только статистика.
Вобщем надо учитывать, что сигнал readyRead испускается соответственно каждой команде по истечение времени.


Название: Re: Как подключится к POP серверу ?
Отправлено: crossly от Март 31, 2010, 13:58
http://qt.gitorious.org/qt-labs/messagingframework/blobs/master/src/plugins/messageservices/pop/popclient.cpp (http://qt.gitorious.org/qt-labs/messagingframework/blobs/master/src/plugins/messageservices/pop/popclient.cpp)