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

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. ТЕХНИЧЕСКОЕ ЗАДАНИЕ



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

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



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

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





Программа (клиент Эл.почты)

Протокол (POP3)

Отправка запросов

Получение доступа

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

		

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

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

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

		


Программа (клиент Эл.почты)

Протокол (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. 

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

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

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

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

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

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

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

	Response – метод обратный от Write. 

Класс SMTP 

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

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

Класс Form1 

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

Основные методы:

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

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

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

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

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

	Класс FormSettings 

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

	Основные методы:

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

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


3. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ



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

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

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


ЗАКЛЮЧЕНИЕ



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


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



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

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

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

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




ПРИЛОЖЕНИЕ 1



Form1.cs

namespace Mail_client

{

    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;

        private FormSettings fset= new FormSettings();

        private FormNewMess fnewmess = new FormNewMess();

        public Form1()

        {

            InitializeComponent();

            this.ShowInTaskbar = false;

            dir = Directory.GetCurrentDirectory();

            ItemsAdd();

    LoadProfile();

        }

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

        {

            FileStream fs = new FileStream(dir+"\\messages\\profile\\porfile.txt",

                FileMode.Open, FileAccess.Read);

            StreamReader sr = new StreamReader(fs);

            string CurLine;

            int i = 0;

            while

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

            {

                i++;

                if(i==1)

                    countMes = Convert.ToInt32(CurLine);

                if (i == 2)

                {

                    sServerName = CurLine;

                }

                    if (i == 3)

                    sUserName = CurLine;

                if (i == 4)

                    sPassword = CurLine;

                if (i == 4)

                    SMTPserver = CurLine;

            }

            countMesStart = countMes;

            fs.Close();

            sr.Close();

            return CurLine;

        }

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

        {

           String fil="";

            if (c==2 )

              fil  = "";

            if (c == 1)

                fil = ".txt";

           FileStream fs = new FileStream(dir+"\\messages\\" + num + fil,

                  FileMode.Open, FileAccess.Read);

            StreamReader sr = new StreamReader(fs);

            string CurLine="";

            CurLine = sr.ReadToEnd();

            fs.Close();

            sr.Close();

            return CurLine;

        }

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

    {  string content;

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

            oPOP.ConnectPOP(sServerName, sUserName, sPassword);

         ArrayList MessageList= oPOP.ListMessages();

         foreach (POPException.POP3EmailMessage POPMsg in MessageList)

         {  

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

           content= POPMsgContent.msgContent;

           string filename = Theme(content);

           FileCreate(filename,content);

         //  richTextBox2.Text += content;

           ItemsAdd();

         }

                oPOP.DisconnectPOP();

    }

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

        {

            string resultValue="";

            char m='\r' ;

            int i = content.LastIndexOf("Subject:");

            i += 9;

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

            {

                c = content[i]; 

             resultValue +=c;

            }

            return resultValue;

        }

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

        {

            string resultValue = "";

            char m = '\r';

            int i = content.IndexOf("From:");

            i+=6;

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

            {

                c = content[i];

                resultValue += c;

            }

            return resultValue;

        }

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

        {

            string resultValue = "";

            char m = '\r';

            int i = content.IndexOf("\nTo:");

            i += 4;

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

            {

                c = content[i];

                resultValue += c;

            }

            return resultValue;

        }

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

        {

            countMes++;

            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);

        }

        myStream.Close();

        }

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

        {

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

            lvi.SubItems.Add(theme);

            lvi.SubItems.Add(from);

            listView1.Items.Add(lvi);

        }

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

        {string strin="";

      //  listBox1.Items.Clear();

        listView1.Items.Clear();

        //char c;

        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];

                        strin += c;

                    }

                   string content=ReadMess(strin, 2);

                  string from = FromMess(content);

                    ListMess(strin,Theme(content), from);

                      //  listBox1.Items.Add(strin);

                        strin = "";

                    }

                }

            }

        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);

           //   ListMess(x,Theme(content), FromMess(content));

                 Them.Text = Theme(content);

                 From.Text = FromMess(content);

                 To.Text = ToMess(content);

                 char m = '\n';

                 char z = '0';

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

                 i += 9;

                 while (content[i] != m)

                     i++;

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

                 {

                     c = content[i];

                     resultValue += c;

                 } 

            return resultValue ;

        }

     private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            string content = ShowMes();

            richTextBox3.Text = content;

        }

        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+@"\messages\profile\Folder1.ico");

            //Отключаем доступность пункта меню mnuShow

            mnuShow.Enabled = false;

            //Включаем доступность пункта меню mnuHide

            mnuHide.Enabled = true;

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

        }

        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();

            listView1.Items.Clear();

            Application.Exit();

        }

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

        {

            fnewmess.ShowDialog(this);

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

        {

            Get();

            if (countMesStart < countMes)

            {

                notifyIcon1.Icon = new Icon(dir + @"\messages\profile\NotePad.ico");

            }

        }

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

        {

            string content = ShowMes();

            richTextBox3.Text = content;

        }

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

        {

            Get();

        }

        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 + @"\messages\profile\Folder1.ico");

            }

        }

    }

}

Program.cs 

namespace Mail_client

{

    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; } }

            /// <summary>

            /// The main entry point for the application.

            /// </summary>

            [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);

                client.Send(message);

            }

        }

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

        {

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

            {

                string sMessages;

                string sResult;

                //вызываем метод connect класса TcpClient

                Connect(sServerName, 110);

                sResult = Response();

                //проверка ответа

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

                    throw new POPException(sResult);

               //отправляем имя пользователя

                sMessages = "USER " + sUserName + "\r\n";

                Write(sMessages);

                sResult = Response();

                //проверка ответа

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

                    throw new POPException(sResult);

                //отправляем пароль 

                sMessages = "PASS " + sPassword + "\r\n";

                Write(sMessages);

                sResult = Response();

                //проверка ответа

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

                    throw new POPException(sResult);

            }

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

            {

                string sMessage;

                string sResult;

                sMessage = "QUIT\r\n";

                Write(sMessage);

                sResult = Response();

                //проверка ответа

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

                    throw new POPException(sResult);

            }

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

            {

                string sMessage;

                string sResult;

                ArrayList returnValue = new ArrayList();

                sMessage = "LIST\r\n";

                Write(sMessage);

                sResult = Response();

                //проверка ответа

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

                    throw new POPException(sResult);

                while (true)

                {

                    sResult = Response();

                    if (sResult == ".\r\n")

                    {

                     //   Program.MainForm.Add(returnValue);

                        return returnValue;

                    }

                    else

                    {

                        POP3EmailMessage oMailMessage = new POP3EmailMessage();

                        //Определяем разделитель

                        char[] sep = { ' ' };

                        //используем метод Split, чтобы разбить массив

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

                        //Помещаем данные в объект OMailMessage

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

                     //  ToString(count);

                      //  Program.MainForm.Add(rv);

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

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

                        oMailMessage.msgReceived = false;

                        returnValue.Add(oMailMessage);

                        continue;

                    }

                }

            }

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

            {

                string sMessage;

                string sResult;

                POP3EmailMessage oMailMessage = new POP3EmailMessage();

                oMailMessage.msgNumber = msgRETR.msgNumber;

                oMailMessage.msgSize = msgRETR.msgSize;

                //для получения соответсвующего сообщения посылаем RETR

                sMessage = "RETR " + msgRETR.msgNumber + "\r\n";

                Write(sMessage);

                sResult = Response();

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

                    throw new POPException(sResult);

                //поскольку сообщение получено устанавливаем во флаге true

                oMailMessage.msgReceived = true;

                while (true)

                {

                    sResult = Response();

                    if (sResult == ".\r\n")

                        break;

                    else

                        oMailMessage.msgContent += sResult;

                }

                string content = oMailMessage.msgContent;

                return oMailMessage;

            }

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

            {

                string sMessage;

                string sResult;

                sMessage = "DELE" + msgDELE.msgNumber + "\r\n";

                Write(sMessage);

                sResult = Response();

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

                    throw new POPException(sResult);

            }

            private void Write(string sMessage)

            {//используется для перекодирования данных

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

                //теперь пересылаем сообщение в буфер для отправки в сетевой поток TCP

                byte[] WriteBuffer = new byte[1024];

                WriteBuffer = oEncodeData.GetBytes(sMessage);

                //выводим содержимое буффера в поток TCP

                NetworkStream NetStream = GetStream();

                NetStream.Write(WriteBuffer, 0, WriteBuffer.Length);

            }

            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)

                    {

                        ServerBuffer[count] = buff[0];

                        count++;

                        if (buff[0] == '\n')

                            break;

                    }

                    else break;

                }

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

                return ReturnValue;

            }

        }

    }

}

FormSettings.cs 

namespace Mail_client

{

    public partial class FormSettings : Form

    {

        private string dir1;

        public FormSettings()

        {

            InitializeComponent();

            dir1=Directory.GetCurrentDirectory();

            LoadProfile();

        }

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

        {

            FileStream fs = new FileStream(dir1+ "\\messages\\profile\\porfile.txt",

                FileMode.Open, FileAccess.Read);

            StreamReader sr = new StreamReader(fs);

            string CurLine;

            int i = 0;

            while

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

            {

                i++;

                if (i == 1)

                {

                    Form1.countMes = Convert.ToInt32(CurLine);

                }

                if (i == 2)

                {

                    POP3.Text = CurLine;

                Form1.sServerName = CurLine;

                }

                if (i == 3)

                {

                    UserName.Text = CurLine;

                    Form1.sUserName = CurLine;

                }

                if (i == 4)

                {

                    Pass.Text = CurLine;

                    Form1.sPassword = CurLine;

                }

                if (i == 5)

                {

                    SMTP.Text = CurLine;

                    Form1.SMTPserver = CurLine;

                }

            }

            fs.Close();

            sr.Close();

            return CurLine;

        }

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

        {

            StreamWriter sw = new StreamWriter(dir1+ "\\messages\\profile\\porfile.txt"); //сохраняем данные почтового ящика

            {

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

                sw.WriteLine(POP3.Text);

                sw.WriteLine(UserName.Text);

                sw.WriteLine(Pass.Text);

                sw.WriteLine(SMTP.Text);

            }

            // FileStream myStream = File.Create("F:\\messages\\profile\\porfile.txt");

           string str = Form1.countMes.ToString();

            sw.Close();

        }

        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) //сохранение профиля

        {

            EditProfile(); 

        }

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

        {//и форма сворачивается

            EditProfile();

            this.Hide();

        }

    }

}

6