Результатом выполнения курсовой работы на тему «Разработка приложения-клиента электронной почты» стала программа, содержащая в себе методы реализации протоколов электронной почты POP3 и SMTP, так как, все современные почтовые сервера используют эти протоколы, а также методы отправки и приема писем. Программа представляет собой удобный пользовательский интерфейс, интуитивно понятный для любого пользователя, программе не требуется установка, что позволяет использовать программу с любых носителей информации.
1. Герберт Шилдт «Полный справочник по C++», 2004 г.
2. Лабор В.В «Создание приложений для Windows», 2003 г.
3. Агуров П.В «Разработка компонентов в MS Visual Studio», 2008 г.
4. Э.Кровчик, В.Кумар, Н.Логари, А.Мунгале, К.Нагел, Т.Паркер, Ш.Шивакумар «NET сетевое программирование для профессионалов»,2005г.
Form1.cs
namespace Mail_client
{
public partial classForm1 : 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;
privateFormSettings fset= newFormSettings();
private FormNewMess fnewmess = newFormNewMess();
public Form1()
{
InitializeComponent();
this.ShowInTaskbar = false;
dir = Directory.GetCurrentDirectory();
ItemsAdd();
LoadProfile();
}
public string LoadProfile() //загрузка файла профиля
{
FileStream fs = newFileStream(dir+"\messages\profile\porfile.txt",
FileMode.Open, FileAccess.Read);
StreamReader sr = newStreamReader(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 = newStreamReader(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;
}
publicstring 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;
}
publicvoid 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();
}
publicvoid ListMess(string num,string theme, string from) // добавление сообщений в листвью
{
ListViewItem lvi = newListViewItem((listView1.Items.Count + 1).ToString());
lvi.SubItems.Add(theme);
lvi.SubItems.Add(from);
listView1.Items.Add(lvi);
}
publicvoid 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 = "";
}
}
}
publicstring 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 ;
}
privatevoid listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string content = ShowMes();
richTextBox3.Text = content;
}
privatevoid настройкиЯщикаToolStripMenuItem_Click(object sender, EventArgs e) //показ формы настройки ящмка
{
fset.ShowDialog(this);
}
privatevoid mnuShow_Click(object sender, EventArgs e) //отображение главной формы
{
//Включаем отображения приложения на панели задач при запуске
this.ShowInTaskbar = true;
//Показываем форму
this.Show();
timer1.Enabled = false;
notifyIcon1.Icon =newIcon(dir+@"\messages\profile\Folder1.ico");
//Отключаем доступность пункта меню mnuShow
mnuShow.Enabled = false;
//Включаем доступность пункта меню mnuHide
mnuHide.Enabled = true;
//Переменной Hidden устанавливаем значение false
}
privatevoid mnuHideToolStripMenuItem_Click(object sender, EventArgs e)//сворачивание главной формы в трей
{
this.ShowInTaskbar = false;
this.Hide();
mnuShow.Enabled = true;
mnuHide.Enabled = false;
timer1.Enabled = true;
}
privatevoid notifyIcon1_DoubleClick(object sender, EventArgs e) //открытие формы по щелчку на иконке в трее
{
mnuShow_Click(this, newEventArgs());
}
privatevoid 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;
}
}
privatevoid выходToolStripMenuItem_Click(object sender, EventArgs e) // процедура выхода из программы
{
notifyIcon1.Visible = false;
this.ShowInTaskbar = false;
this.Hide();
listView1.Items.Clear();
Application.Exit();
}
privatevoid написатьПисьмоToolStripMenuItem_Click(object sender, EventArgs e)//показ формы Нового сообщения
{
fnewmess.ShowDialog(this);
privatevoid timer1_Tick(object sender, EventArgs e) //таймер отвечает за проверку сообщений по времени
{
Get();
if (countMesStart < countMes)
{
notifyIcon1.Icon = newIcon(dir + @"\messages\profile\NotePad.ico");
}
}
privatevoid listView1_ItemActivate(object sender, EventArgs e)//изменение выброного сообщения
{
string content = ShowMes();
richTextBox3.Text = content;
}
privatevoid получитьПочтуToolStripMenuItem_Click(object sender, EventArgs e)
{
Get();
}
privatevoid Form1_Deactivate(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.ShowInTaskbar = false;
this.Hide();
mnuShow.Enabled = true;
mnuHide.Enabled = false;
timer1.Enabled = true;
}
}
privatevoid 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 = newIcon(dir + @"\messages\profile\Folder1.ico");
}
}
}
}
Program.cs
namespace Mail_client
{
namespace POPException
{
publicclassPOPException : System.ApplicationException
{
public POPException(string str)
: base(str)
{
}
}
staticclassProgram
{
staticForm1 frm = null;
publicstaticForm1 MainForm { get { return frm; } }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
staticvoid Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(frm = newForm1());
}
}
publicclassPOP3EmailMessage //класс описывающий emailMessage
{
publiclong msgNumber;
publiclong msgSize;
publicbool msgReceived;
publicstring msgContent;
}
publicclassSMTP
{
publicvoid SendMail(string sSMTPServer, string sFrom, string sTo, string sSubject, string sBody)//класс SMTP отвечающий за отправку сообщений