Учебная работа. Курсовая работа: Разработка приложения клиента электронной почты

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Курсовая работа: Разработка приложения клиента электронной почты

AСТРAХAНСКИЙ ГОСУДAРСТВEННЫЙ УНИВEРСИТEТ

Кaфeдрa

информaционных систeм

и тeхнологий

Курсовaя рaботa по дисциплинe

«Объeктно-ориeнтировaнноe прогрaммировaниe»

нa тeму:

“Разработка приложения – клиента электрической почты”

Выполнили: студeнты группы ЗИ-31

Егоров Д.С.

Арушанов С.С.

Курсовaя рaботa допущeнa к зaщитe

Руководитeль: aсс. Пaвлов A.A.

Курсовaя рaботa выполнeнa с оцeнкой ___________

Пaвлов A.A.___________

Aстрaхaнь – 2009 г.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

2. РАБОЧИЙ ПРОЕКТ

2.1. Общие сведения о работе программки

2.2. Функциональное предназначение

2.3. установка и выполнение программки

2.4. Общий метод программного обеспечения

2.5. Разработанные меню и интерфейсы

2.6. Описание главных классов и способов приложения

3. программка И методика ИСПЫТАНИЙ

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

приложение 1

ВВЕДЕНИЕ

Язык С++, разработанный Microsoft имеет массу преимуществ перед иными языками типа С, С++, Java: простота, объектная ориентированность, типовая защищенность, «сборка мусора», поддержка сопоставимости версий и почти все другое. Данные способности разрешают стремительно и просто разрабатывать приложения. При разработке С++ его создатели учитывали заслуги почти всех остальных языков программирования: C++, С, Java, Visual Basic и т.д. Нужно увидеть, что так как С++ разрабатывался что именуется «с нуля», у его создателей была возможность не переносить в него все плохие индивидуальности хоть какого из предыдущих языков. В особенности это касается препядствия сопоставимости с прошлыми версиями. В итоге вышел вправду обычный, удачный и современный язык, который по мощности не уступает C++, но значительно увеличивает продуктивность разработок. Ввиду высочайшей объектной ориентированности, язык С++ потрясающе подступает для резвого конструирования разных компонент — от высокоуровневой бизнес-логики до системных приложений, использующих низкоуровневый код. Также необходимо подчеркнуть, что С++ является и Web-ориентированным — при помощи обычных интегрированных конструкций языка ваши составляющие просто перевоплотился в Web-сервисы, к которым можно будет обращаться из Веба, используя хоть какой язык на хоть какой операционной системе. Доп способности и достоинства С++ перед иными языками приносит внедрение современных Web-технологий, таковых как: XML (Extensible Markup Language) и SOAP (Simple Object Access Protocol). Комфортные способы для разработки Web-приложений разрешают программерам, владеющим способностями объектно-ориентированного программирования, просто акклиматизироваться в разработке Web-сервисов.

Цель данной курсовой работы укрепить и сделать лучше практические способности основ объектно-ориентированного программирования, приобретенных во время исследования курса, по данному предмету, также научиться использовать приобретенные познания в сетевом программировании .NET.

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Разработка приложения-клиента электрической почты.

В процессе разработки клиентского приложения электрической почты, нужно создать и воплотить с внедрение 2-ух главных протоколов передачи электрической почты POP3 и SMTP:

· способы приема и отправки сообщений;

· интуитивно понятный интерфейс, обеспечивающий комфортную работу с приложением;

· сохранение почтовых сообщений на локальном диске компа;

· воплотить методы построения перечня сообщений;

· при выбирании сообщения обеспечить отображение темы сообщения, отправителя и адресата письма, также текст самого сообщения;

· добавочно нужно воплотить возможность сворачивания приложения в трей панели задач Windows;

· проверку наличия новейших сообщений по времени и смену иконки в трее при получении новейших сообщений.

2. РАБОЧИЙ ПРОЕКТ

2.1. Общие сведения о работе программки

программка разработaнa в среде программирования Microsoft Visual Studio 2008, на языке программирования C++.

программка посылает запрос на сервер электрической почты. протокол POP3 инспектирует корректность ввода имени и пароля электрической почты. Опосля этого программка получает ответ от протокола о статусе ввода пароля и имени (верно, не верно). Если все переменные введены верно, то происходит подключение к серверу. Опосля этого программка получает перечень сообщений с сервера, а опосля этого сохраняет их на локальном компе. Опосля окончания получения сообщения происходит отсоединение от сервера POP3.

При отправке сообщений употребляется протокол SMTP. Сначала происходит авторизация на сервере SMTP, а опосля этого конкретная передача сообщения почтовому бесу.

2.2. Функциональное предназначение

программка создана для получения и отправки электрических писем, содержит теоретические и практические материалы, дозволяющие классифицировать познания по работе с сетевыми протоколами электрической почты.

2.3. установка и выполнение программки

Для пуска программки из среды «Microsoft Visual Studio 2008» нужно, зайдя в «Microsoft Visual Studio 2008» запустить файл Mail client.sln.

2.4. Общий метод программного обеспечения

программка состоит из способов, которые употребляются для подключения к серверам электрической почты, используя протоколы электрической почты, а так же для получения и отправки электрических писем.

При нажатии на меню «Получить почту», происходит подключение к серверу через протокол, и получение перечня входящих писем.

Рис. 1.1. «Диаграмма работы протокола POP3»

При нажатии на клавишу написать письмо в меню «Файл», загружается окно новейшего письма, в каком содержатся поля: кому адресовано письмо, поле темы, поле для текста письма и клавиша для отправки письма.

При нажатии на клавишу «SendMail», происходит отправка письма, используя протокол SMTP.

При нажатии клавиши выход в меню «Файл», происходит окончание работы программки.

Рис. 1.2. «Диаграмма работы протокола SMTP»

2.5. Разработанные меню и интерфейсы

При запуске программки на дисплее возникает основное окно программки с органами управления (Рис. 2.1).

Рис. 2.1. «Основное окно»

Для опции почтового клиента нужно надавить на меню «Опции». В итоге, загружается окно опций (рис. 2.2.).

Рис. 2.2. «Опции»

Для отправки письма нужно запустить окно «Написать письмо» (рис 2.3.), нажатием на клавишу «Написать письмо» в меню «Файл».

Рис. 2.3. окно «Написать сообщение»

2.6. Описание главных классов и способов приложения

Рис. 3.1. «Диаграмма классов»

Класс POP3

Класс POP3, также как и одноименный протокол употребляется для извлечения сообщений с почтового сервера. Данный класс наследуется от System.Net.Sockets.TcpClient реализованного в VS 2008.

Класс содержит несколько способов:

·

– употребляется для установки соединения с сервером;

·

– закрывает соединение с сервером;

·

– получаем перечень сообщений с сервера;

·

– получение сообщения с сервера;

·

– удаление сообщения на сервере;

·

– воспринимает сообщение на входе и записывает его в сетевой поток TCP;

·

способ оборотный от Write.

Класс SMTP

Класс SMTP как и одноименный протокол обеспечивает отправку сообщений.

Содержит способ

, который обеспечивает отправку сообщения по протоколу SMTP.

Класс Form1

Класс Form1 обеспечивает интерфейс головного окна программки, также обеспечивает функциональность сохранения и отображения принятых сообщений.

Главные способы:

·

загрузка файла профиля почтового ящика;

·

– чтение сообщения из файла;

·

– сохранение почтового сообщения;

·

загрузка сообщений в элемент ListView;

·

– добавление новейших сообщений в элемент ListView;

Класс FormSettings

Класс FormSettings обеспечивает интерфейс окна опций почтового ящика, также обеспечивает сохранение этих опций в файл профиля.

Главные способы:

·

– загрузка файла профиля почтового ящика;

·

– сохранение конфигураций профиля почтового ящика;

3. программка И методика ИСПЫТАНИЙ

Пуск программки осуществляется при помощи пуска файла Mail client.sln из среды разработки «MVS-2008».

Вверху окна размещены клавиши головного меню (рис. 3.5.1). Ниже размещено поле, в которое загружается перечень приобретенных писем. В самое нижнее поле загружается текст письма.

Результатом нажатия на меню «Получить почту», будет загрузка входящих писем в верхнее поле. Результатом нажатия на хоть какое письмо, будет загрузка текста письма в нижнее поле. Для отправки письма необходимо загрузить окно «Написать письмо» (рис 3.5.3) в меню файл. Результатом нажатия клавиши «SendMail» в окне «Написать письмо» будет отправка Эл. письма адресату. Результатом нажатия клавиши «выход» в меню «файл», будет выход из программки.

ЗАКЛЮЧЕНИЕ

Результатом выполнения курсовой работы на тему «Разработка приложения-клиента электрической почты» стала программка, содержащая внутри себя способы реализации протоколов электрической почты POP3 и SMTP, потому что, все современные почтовые сервера употребляют эти протоколы, также способы отправки и приема писем. Программка представляет собой удачный пользовательский интерфейс, интуитивно понятный для хоть какого юзера, программке не требуется установка, что дозволяет употреблять программку с всех носителей инфы.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Герберт Шилдт «Полный справочник по C++», 2004 г.

2. Лабор В.В «Создание приложений для Windows», 2003 г.

3. Агуров П.В «Разработка компонент в MS Visual Studio», 2008 г.

4. Э.Кровчик, В.Кумар, Н.Логари, А.Мунгале, К.Нагел, Т.Паркер, Ш.Шивакумар «NET сетевое программирование для экспертов»,2005г.

приложение 1

Form1.cs


public partial class
Form1
: Form

private string
dir;

public static int
countMesStart;

public static int
countMes=0;

public static string
sServerName ;

public static string
sUserName;

public static string
sPassword;

public static string
SMTPserver;



FormSettings
fset= new
FormSettings
();

private FormNewMess
fnewmess = new
FormNewMess
();

public
Form1()

this
.ShowInTaskbar = false
;

dir = Directory
.GetCurrentDirectory();

public string
LoadProfile() //загрузка файла профиля

FileStream
fs = new
FileStream
(dir+»messagesprofileporfile.txt»,

FileMode
.Open, FileAccess
.Read);

StreamReader
sr = new
StreamReader
(fs);

string
CurLine;

int
i = 0;

while

( (CurLine = sr.ReadLine()) != null
)

if
(i==1)

countMes = Convert
.ToInt32(CurLine);

if
(i == 2)

if
(i == 3)

if
(i == 4)

if
(i == 4)

return
CurLine;

public string
ReadMess(string
num, int
c) //чтение сообщения

String
fil=»»;

if
(c==2 )

if
(c == 1)

FileStream
fs = new FileStream
(dir+»messages» + num + fil,

FileMode
.Open, FileAccess
.Read);

StreamReader
sr = new
StreamReader
(fs);

string
CurLine=»»;

return
CurLine;

public void
Get() //получение сообщений с сервера

{ string
content;

POPException.POP3
oPOP = new
POPException.POP3
();

ArrayList
MessageList= oPOP.ListMessages();

foreach
(POPException.POP3EmailMessage
POPMsg in
MessageList)

POPException.POP3EmailMessage
POPMsgContent= oPOP.RetriveMessage(POPMsg);

string
filename = Theme(content);

public string
Theme(string
content) //процедура получения темы сообщения

string
resultValue=»»;

char
m=’r’ ;

int
i = content.LastIndexOf(«Subject:»);

for
( char
c=content[i];content[i]!=m; i++)

return
resultValue;



FromMess(string
content) //получение поля ОТ

string
resultValue = «»;

char
m = ‘r’;

int
i = content.IndexOf(«From:»);

for
(char
c = content[i]; content[i] != m; i++)

return
resultValue;

public
string
ToMess(string
content) //получения поля кому

string
resultValue = «»;

char
m = ‘r’;

int
i = content.IndexOf(«nTo:»);

for
(char
c = content[i]; content[i] != m; i++)

return
resultValue;

public
void
FileCreate(string
filename,string
content) //процедура сотворения файла

FileStream
myStream=File
.Create(dir+»messages»+countMes+».txt»);

int
z = content.Length;

for
( int
i=0; i < z; i++)

char
c = content[i];

myStream.WriteByte((byte
)c);

public
void
ListMess(string
num,string
theme, string
from) // добавление сообщений в листвью

ListViewItem
lvi = new
ListViewItem
((listView1.Items.Count + 1).ToString());

public
void
ItemsAdd()// Добавление новейших сообщений

{string
strin=»»;

string
[] contents = System.IO.Directory
.GetFileSystemEntries(dir + @»messages»);

foreach
(string
s in
contents)

if
((s.IndexOf(«profile») == -1))

for
(int
z = s.LastIndexOf(«»)+1; z < s.Length; z++)

char
c = s[z];

string
content=ReadMess(strin, 2);

string
from = FromMess(content);

public
string
ShowMes() //процедура показа выделенного сообщения

string
resultValue = «»;

if
(listView1.SelectedItems.Count == 0)

return
resultValue ;

string
x = listView1.SelectedItems[0].Text;

string
content = ReadMess(listView1.SelectedItems[0].Text, 1);

char
m = ‘n’;

char
z = ‘0’;

int
i = content.LastIndexOf(«Content-Transfer-Encoding:»);

while
(content[i] != m)

for
(char
c = content[i+1]; i < (content.Length); i++)

return
resultValue ;

private
void
listBox1_SelectedIndexChanged(object
sender, EventArgs
e)

string
content = ShowMes();

private
void
настройкиЯщикаToolStripMenuItem_Click(object
sender, EventArgs
e) //показ формы опции ящмка

fset.ShowDialog(this
);

private
void
mnuShow_Click(object
sender, EventArgs
e) //отображение главной формы

this
.ShowInTaskbar = true
;

this
.Show();

timer1.Enabled = false
;

notifyIcon1.Icon =new
Icon
(dir+@»messagesprofileFolder1.ico»);

mnuShow.Enabled = false
;

mnuHide.Enabled = true
;

//Переменной Hidden устанавливаем

private
void
mnuHideToolStripMenuItem_Click(object
sender, EventArgs
e)//сворачивание главной формы в трей

this
.ShowInTaskbar = false
;

this
.Hide();

mnuShow.Enabled = true
;

mnuHide.Enabled = false
;

timer1.Enabled = true
;

private
void
notifyIcon1_DoubleClick(object
sender, EventArgs
e) //открытие формы по щелчку на иконке в трее

mnuShow_Click(this
, new
EventArgs
());

private
void
Form1_FormClosing(object
sender, FormClosingEventArgs
e) //закрытие главной формы

if
(e.CloseReason == CloseReason
.UserClosing)

e.Cancel = true
;

this
.Hide();

mnuShow.Enabled = true
;

mnuHide.Enabled = false
;

timer1.Enabled = true
;

private
void
выходToolStripMenuItem_Click(object
sender, EventArgs
e) // процедура выхода из программки

notifyIcon1.Visible = false
;

this
.ShowInTaskbar = false
;

this
.Hide();

Application
.Exit();

private
void
написатьПисьмоToolStripMenuItem_Click(object
sender, EventArgs
e)//показ формы Новейшего сообщения

fnewmess.ShowDialog(this
);

private
void
timer1_Tick(object
sender, EventArgs
e) //таймер отвечает за проверку сообщений по времени

if
(countMesStart < countMes)

notifyIcon1.Icon = new
Icon
(dir + @»messagesprofile.ico»);

private
void
listView1_ItemActivate(object
sender, EventArgs
e)//изменение выброного сообщения

string
content = ShowMes();

private
void
получитьПочтуToolStripMenuItem_Click(object
sender, EventArgs
e)

private
void
Form1_Deactivate(object
sender, EventArgs
e)

if
(WindowState == FormWindowState
.Minimized)

this
.ShowInTaskbar = false
;

this
.Hide();

mnuShow.Enabled = true
;

mnuHide.Enabled = false
;

timer1.Enabled = true
;

private
void
Form1_Activated(object
sender, EventArgs
e)

if
(WindowState == FormWindowState
.Normal)

this
.ShowInTaskbar = true
;

this
.Show();

timer1.Enabled = false
;

mnuShow.Enabled = false
;

mnuHide.Enabled = true
;

notifyIcon1.Icon = new
Icon
(dir + @»messagesprofileFolder1.ico»);

Program.cs


namespace
POPException

public
class
POPException
: System.ApplicationException

public
POPException(string
str)

: base
(str)

static
class
Program

static
Form1
frm = null
;

public
static
Form1
MainForm { get
{ return
frm; } }

/// The main entry

[STAThread
]

static
void
Main()

Application
.EnableVisualStyles();

Application
.SetCompatibleTextRenderingDefault(false
);

Application
.Run(frm = new
Form1
());

public
class
POP3EmailMessage
//класс описывающий emailMessage

public
long
msgNumber;

public
long
msgSize;

public
bool
msgReceived;

public
string
msgContent;

public
class
SMTP

public
void
SendMail(string
sSMTPServer, string
sFrom, string
sTo, string
sSubject, string
sBody)//класс SMTP отвечающий за отправку сообщений

SmtpClient
client = new
SmtpClient
(sSMTPServer, 25);

client.Credentials = new
NetworkCredential
(Form1
.sUserName, Form1
.sPassword);

MailMessage
Message = new
MailMessage
(Form1
.sUserName, sTo, sSubject, sBody);

public
class
POP3
: System.Net.Sockets.TcpClient
// Класс POP3 отвечающий за доставку смс сообщений

public
void
ConnectPOP(string
sServerName, string
sUserName, string
sPassword) // соединение с POP сервером

string
sMessages;

string
sResult;

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

public
void
DisconnectPOP() //отсоединение от POP сервера

string
sMessage;

string
sResult;

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

public
ArrayList
ListMessages() //получение перечня сообщений с сервера

string
sMessage;

string
sResult;

ArrayList
returnValue = new
ArrayList
();

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

while
(true
)

if
(sResult == «.rn»)

return
returnValue;

else

POP3EmailMessage
oMailMessage = new
POP3EmailMessage
();

char
[] sep = { ‘ ‘ };

string
[] values = sResult.Split(sep);

long
count=Int32
.Parse(values[0]);

oMailMessage.msgNumber = Int32
.Parse(values[0]);

oMailMessage.msgSize = Int32
.Parse(values[1]);

oMailMessage.msgReceived = false
;

continue
;

public
POP3EmailMessage
RetriveMessage(POP3EmailMessage
msgRETR) //доставка сообщений с POP сервера

string
sMessage;

string
sResult;

POP3EmailMessage
oMailMessage = new
POP3EmailMessage
();

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

oMailMessage.msgReceived = true
;

while
(true
)

if
(sResult == «.rn»)

break
;

else

string
content = oMailMessage.msgContent;

return
oMailMessage;

public
void
DeleteMessage(POP3EmailMessage
msgDELE) //удаление сообщений с POP сервера

string
sMessage;

string
sResult;

if
(sResult.Substring(0, 3) != «+OK»)

throw
new
POPException
(sResult);

private
void
Write(string
sMessage)

System.Text.ASCIIEncoding
oEncodeData = new
System.Text.ASCIIEncoding
();

byte
[] WriteBuffer = new
byte
[1024];

NetworkStream
NetStream = GetStream();

private
string
Response() //перекодировка сообщений

System.Text.ASCIIEncoding
oEncodedData = new
System.Text.ASCIIEncoding
();

byte
[] ServerBuffer = new
Byte
[1024];

NetworkStream
NetStream = GetStream();

int
count = 0;

while
(true
)

byte
[] buff = new
Byte
[2];

int
bytes = NetStream.Read(buff, 0, 1);

if
(bytes == 1)

if
(buff[0] == ‘n’)

break
;

else
break
;

string
ReturnValue = oEncodedData.GetString(ServerBuffer, 0, count);

return
ReturnValue;

FormSettings.cs


public
partial
class
FormSettings
: Form

private
string
dir1;

public
FormSettings()

dir1=Directory
.GetCurrentDirectory();

public
string
LoadProfile() //считывание файла профиля

FileStream
fs = new
FileStream
(dir1+ «messagesprofileporfile.txt»,

FileMode
.Open, FileAccess
.Read);

StreamReader
sr = new
StreamReader
(fs);

string
CurLine;

int
i = 0;

while

((CurLine = sr.ReadLine()) != null
)

if
(i == 1)

Form1
.countMes = Convert
.ToInt32(CurLine);

if
(i == 2)

Form1
.sServerName = CurLine;

if
(i == 3)

Form1
.sUserName = CurLine;

if
(i == 4)

Form1
.sPassword = CurLine;

if
(i == 5)

Form1
.SMTPserver = CurLine;

return
CurLine;

public
void
EditProfile() // изменение профиля почтового ящика

StreamWriter
sw = new
StreamWriter
(dir1+ «messagesprofileporfile.txt»); //сохраняем данные почтового ящика

sw.WriteLine(Form1
.countMes.ToString());

string
str = Form1
.countMes.ToString();

private
void
Cancel_Click(object
sender, EventArgs
e) //отмена

this
.Hide();

private
void
FormSettings_FormClosing(object
sender, FormClosingEventArgs
e) //при закрытии формы

e.Cancel = true
;

this
.Hide();

private
void
Save_Click_1(object
sender, EventArgs
e) //сохранение профиля

private
void
Ok_Click(object
sender, EventArgs
e) //при нажатии клавиши Ок сохраняется профиль

this
.Hide();

]]>