Учебная работа. Курсовая работа: Разработка приложения клиента электронной почты
К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();
]]>