The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Клиент IMAP на Qt"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Разное)
Изначальное сообщение [ Отслеживать ]

"Клиент IMAP на Qt"  +/
Сообщение от DsdR email(ok) on 06-Янв-11, 16:20 
Здравствуйте!

Пишу на Qt простенький почтовый клиент для работы с IMAP. Как работать с протоколом я знаю, вручную через консоль все понятно и просто. Проблема в работе с этим программно. Вернее просблема с парсингом ответов сервера, чтобы программа понимала что пришло в ответе.

Мне приходит два направления в решении этой задачи:
1) Вручную разбирать строки - но это не удобно, громоздко, да и вообще геморно писать
2) Регулярные выражения - вроде бы как удобно, но не понятно. Просто так получилось, что это меня как то стороной обошло и не понятно мне как с ними работать.

Вот например при соединении с сервером приходит ответ "* OK Gimap ready for requests from 95.26.60.65 b13if11336977bkb.34" ("* OK <имя сервера>  ready for requests from <ip> <хрень какая-то>"). Попробовал для этого составить регексп - /^\\* OK \\w+? ready for requests from .*$/ Но он не работает.

Может есть у кого масли как осуществить парсинг ответов сервера в подобных протоколах или напишите пример регулярного выражения для этого, если не сложно.

Вообщем кто имел опыт в подобного рода проблемах помогайте пожалуйста!)))

Всем спасибо взаранее!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Клиент IMAP на Qt"  +/
Сообщение от XAnder (ok) on 06-Янв-11, 17:47 
> "* OK Gimap ready for requests from 95.26.60.65 b13if11336977bkb.34"
> "* OK <имя сервера> ready for requests from <ip> <хрень какая-то>"
> Попробовал для этого составить регексп
> /^\\* OK \\w+? ready for requests from .*$/ Но он не работает.

Имея в виду перловые регекспы, можно написать так:
/^\* OK (\S+) ready for requests from (\S+) (.*)$/

Тут будет: $1 - имя сервера, $2 - ip, $3 - "хрень какая-то". Анализом правильности полей здесь не заморачиваюсь.

Кстати, а нет ли готовых библиотек для работы с imap, чтобы не изобретать велосипед? Для perl'а видел, за остальных не скажу.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Клиент IMAP на Qt"  +/
Сообщение от DsdR email(ok) on 08-Янв-11, 17:47 
Спасибо большое!) С самими регулярными выражениями вроде бы вник в суть. Но проблема теперь с Qt. Код следующий:

regExp.setPattern("/^\\* OK (\\S+) ready for requests from (\\S+) (.*)$/");
validator.setRegExp(regExp);
pos = 0;

if(validator.validate(msg, pos) == QValidator::Acceptable)
{
    _state = not_authenticated;
    ui->statusBar->showMessage(QString("Соединение с %1 установлено.").arg(_hostName));
}

Проверил на всякий случай правильно ли составлено выражение на http://regexpr.ru/
Составлено правильно. Но при запуске программы он не попадает в if, условие не выполняется.
Пробовал в проверке писать QValidator::Intermediate - то же не выполняется, хотя по идеи должен  QValidator::Acceptable выполняться. Посмотрел в справке пвроде все так же...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Клиент IMAP на Qt"  +/
Сообщение от DsdR email(ok) on 08-Янв-11, 18:18 
Все.. Вообщем я понял, оказывается в кути не надо ставить "/" в начале и в конце, без них все заработало.
http://qt-apps.org/CONTENT/content-files/79791-rep.zip спосебо этой программе, в ней только заметил)

Вообщем если у кого похожие проблемы убирайте "/"

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру