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

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

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

Хотя это ограничение, на мой взгляд, не столь критично, ведь 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, то правильно я хоть мыслил или я абсолютно заблуждался.
Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines