Программа и методика испытаний

 

Запуск программы осуществляется с помощью запуска файла 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

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

   }

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: