Розробка поштового клієнта для операційної системи Windows

Федеральне агентство з освіти

ПЕНЗЕНСЬКИЙ ДЕРЖАВНИЙ УНІВЕРСИТЕТ

Інститут систем управління та інформаційної безпеки

Пояснювальна записка до курсового проекту

«Розробка поштового клієнта для операційної системи Windows»

МЕРЕЖЕВИЙ ПРОТОКОЛ, СОКОТИ, ЕЛЕКТРОННА ПОШТА, АУТЕНТИФІКАЦІЯ, МЕРЕЖЕВЕ ПРОГРАМУВАННЯ, ОПЕРАЦІЙНА СИСТЕМА WINDOWS

Об'єктом дослідження у курсовому проекті є протокол прикладного рівня POP3. Цей протокол використовується для доступу користувачів мережі до електронних повідомлень, що зберігаються на сервері.

Метою курсового проекту є розробка програми, що реалізує роботу з підмножиною протоколу POP3. Програма має реалізовувати три види автентифікації, запит статистики електронних повідомлень у сервера та розрив з'єднання. Програма має бути розроблена для операційної системи WINDOWS. Для реалізації має бути використана мова програмування Сі. Програма повинна мати графічний інтерфейс.

Завдання на курсове проектування

1. Опис програми

1.1 Опис класу pop3Socket

1.2 Опис класу pop3ClientDlg

1.3 Проста автентифікація

1.4 APOP автентифікація

1.5 AUTH автентифікація

2. Опис реалізації функцій

2.1 Проста автентифікація

2.2 APOP автентифікація

2.3 AUTH автентифікація

3. Посібник користувача

Додаток А. Обов'язковий. Алгоритми функціонування програми

Post Office Protocol (POP) - протокол доставки пошти користувачу з поштової скринькипоштового сервера РОР. Багато концепцій, принципів та понять протоколу POPвиглядають і функціонують подібно до SMTP. Команди POP практично ідентичні командам SMTP, відрізняючись у деяких деталях. На рис.7 зображено модель клієнт-сервер за протоколом POP. POP-сервер знаходиться між агентом користувача та поштовими скриньками.

В даний час існують дві версії протоколу POP - РОР2 і РОРЗ, що мають приблизно однакові можливості, проте несумісні один з одним. Справа в тому, що у РОР2 та РОРЗ різні номери портів протоколу. Між ними немає зв'язку, аналогічного зв'язку між SMTP і ESMTP. Протокол РОРЗ є розширенням чи модифікацією РОР2 - це зовсім інший протокол. РОР2 визначено в документі RFC 937 (Post Office Protocol-Version 2, Butler, et al, 1985), a РОРЗ - RFC 1225 (Post Office Protocol-Version 3, Rose, 1991). Далі коротко розглянемо POP взагалі і докладніше - РОРЗ. PОРЗ розроблений з урахуванням специфіки доставки пошти на персональні комп'ютери та має відповідні операції для цього.

Раніше поштові повідомлення більшості мереж доставлялися безпосередньо від одного комп'ютера до іншого. І якщо користувач часто змінював робочі комп'ютери або комп'ютер належав кільком користувачам, існували певні проблеми. У наші дні загальноприйнято доставку повідомлення не на комп'ютери користувача, а в спеціальні поштові скринькипоштового сервераорганізації, що цілодобово працює (включено).

Конструкція протоколу РОРЗ забезпечує можливість користувачеві звернутися до свого поштового сервера і вилучити пошту, що накопичилася для нього. Користувач може отримати доступ до сервера РОР з будь-якої точки доступу до Інтернету. При цьому він повинен запустити спеціальний поштовий агент (UA), який працює за протоколом РОРЗ, та налаштувати його для роботи зі своїм поштовим сервером. Отже, врозділ моделі POP знаходиться окремий персональний комп'ютер, що працює виключно як клієнт поштової системи (сервера). Підкреслимо також, що повідомлення доставляються клієнту за протоколом POP, а надсилаються, як і раніше, за допомогою SMTP. Тобто на комп'ютері користувача існують два окремі агенти-інтерфейси до поштової системи – доставки (POP) та відправки (SMTP). Розробники протоколу РОРЗ називає таку ситуацію "роздільні агенти" (split UA). Концепція окремих агентів коротко обговорюється у специфікації РОРЗ.

1.Опис програми

У ході виконання курсового проекту було розроблено, що реалізує функції клієнтської програми, що функціонує за протоколом pop3. Програма була розроблена серед Microsoft Visual Studio 2005. Проект програми має діалоговий тип. Під час розробки програми використано бібліотеку класів MFC. Зокрема, був використаний базовий клас CSocket, який є похідним класом від CsynkSocket – клас синхронних сокетів. Використання механізму синхронних сокетів дозволяє організувати впорядковане функціонування програми, не використовуючи додаткових механізмів синхронізації. Синхронний механізм не дозволяє розпочати виконання дії до того, як було отримано підтвердження виконання попереднього.

У розробленому проекті було реалізовано клас pop3Socket, який є спадкоємцем класу CSocket.

Під час реалізації програми використовувався клас md5Capi, який містить реалізації хеш-функції MD5 з використанням бібліотеки wincrypt.h

1.1 Опис класу pop3Socket

Розроблений клас має таку структуру:

class pop3Socket: public CSocket

virtual void OnReceive(int nErrorCode);

virtual void OnClose(intnErrorCode);

virtual void OnSend(int nErrorCode);

У секції public класу знаходяться такі властивості та методи:

pop3Socket(Cpop3ClientDlg* Dlg) – конструктор класу. Даний конструктор перевантажений відповідно до логіки роботи програми, щоб дозволити встановити залежність створюваного сокету від діалогового вікна.

pop3Socket() – Віртуальний деструктор класу;

virtual void OnReceive(int nErrorCode) - віртуальний метод класу, що викликається при отриманні сокетом вхідного повідомлення;

virtual void OnClose(int nErrorCode) - віртуальний метод класу, що викликається при закритті сокету;

virtual void OnSend(int nErrorCode) - віртуальний метод класу, що викликається при надсиланні інформації через сокет;

char fl – властивість класу, що використовується під час аналізу відповіді сервера.

Cpop3ClientDlg* m_Dlg – властивість – покажчик на діалогове вікно типу Cpop3ClientDlg (головне діалогове вікно програми).

Визначення класу наведено у файлі pop3Socket.h проекту.

Реалізація методів класу наведена у файлі pop3Socket.срр проекту.

1.2 Опис класу pop3ClientDlg

Клас pop3ClientDlg є спадкоємцем класу CDialog.

Клас має таку структуру:

class Cpop3ClientDlg: public CDialog

Cpop3ClientDlg(CWnd* pParent = NULL); // standard constructor

virtual void DoDataExchange (CDataExchange * pDX); // DDX/DDV support

// Generated message map functions

віртуальний BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnBnClickedButton1();

afx_msg void OnBnClickedButton2();

afx_msg voidOnBnClickedRadio1();

afx_msg void OnBnClickedRadio2();

afx_msg void OnBnClickedRadio3();

Cpop3ClientDlg(CWnd* pParent = NULL) – стандартний конструктор, успадкований від класу CDialog;

virtual void DoDataExchange (CDataExchange * pDX) - метод, що реалізує механізм обміну даними DDX.

Методи, що генерують повідомлення:

virtual BOOL OnInitDialog(), afx_msg void OnSysCommand(UINT nID, LPARAM lParam), afx_msg void OnPaint(), afx_msg HCURSOR OnQueryDragIcon(), DECLARE_MESSAGE_MAP().

При розробці класу були створені наступні методи та свійтсва:

CListBox Protocol – Компонент керування типу ClistBox, у якому проводиться виведення рядків протоколу обміну між сервером та клієнтом.

CButton connect_btn – змінна, пов'язана з кнопкою встановлення з'єднання із сервером

CButton disconnect_btn – змінна, пов'язана з кнопкою розриву з'єднання з сервером

bool simple, apop, auth – логічні змінні. Вони встановлюються значення «true» залежно від того, який тип аутентифікації обраний користувачем.

afx_msg void OnBnClickedButton1() – метод, що викликається притисканням на компонент Button1(кнопка з'єднання).

afx_msg void OnBnClickedButton2() – метод, що викликається притисканням на компонент Button2(кнопка розриву з'єднання).

afx_msg void OnBnClickedRadio1() – метод, який викликається при натисканні на компонент RadioButton1 – проста автентифікація.

afx_msg void OnBnClickedRadio2() – метод, який викликається при натисканні на компонент RadioButton1 – APOP автентифікація.

afx_msg void OnBnClickedRadio3() – метод, який викликається при натисканні на компонент RadioButton1 – AUTH аутентифікація.

Опис класу pop3ClientDlg міститься у файлі pop3ClientDlg.h. Реалізація класу міститьсяу файлі pop3ClientDlg.cpp.

У ході розробки проекту було модифіковано такі методи класу: метод BOOL Cpop3ClientDlg::OnInitDialog() – до нього додана ініціалізація властивостей класу:

Основна частина коду програма міститься у методі void Cpop3ClientDlg::OnBnClickedButton1() – методі, який викликається при натисканні користувачем на кнопку Button1.

1.2 Опис методу void Cpop3ClientDlg::OnBnClickedButton1()

Метод містить такі локальні змінні:

pop3Socket * pSocket – покажчик на об'єкт класу pop3Socket;

int port – цілочисленна змінна зберігання номера порту сервера;

CString messtr – рядок для зберігання сформованого повідомлення відповіді клієнта