private void AddAccountToolStripMenuItem_Click(object sender, EventArgs e) { //删除可能存在的控件 //删除收件箱自定义控件 for (int i = 0; i <= 10; i++)//1次循环无法清理干净,所以执行多次循环 { foreach (Control control in Controls) { if (control is email_overview_display_bg) { control.Dispose(); } } } //将右侧内容清空 for (int i = 0; i <= 10; i++)//1次循环无法清理干净,所以执行多次循环 { foreach (Control control in details.Controls) { if (control is LinkLabel || (control is Label && control.Text == "附件列表:") || control is Button) { control.Dispose(); } } } subject.Text = null; sender_email.Text = null; Date.Text = null; content.Text = null; sign_in sign_in_wnd = new sign_in(); sign_in_wnd.ShowDialog(); }
private void DisconnectAndDeleteToolStripMenuItem_Click(object sender, EventArgs e) { isLoggedIn = false; //删除可能存在的控件 //删除收件箱自定义控件 for (int i = 0; i <= 10; i++)//1次循环无法清理干净,所以执行多次循环 { foreach (Control control in overview.Controls) { if (control is email_overview_display_bg) { control.Dispose(); } } } //将右侧内容清空 for (int i = 0; i <= 10; i++)//1次循环无法清理干净,所以执行多次循环 { foreach (Control control in details.Controls) { if (control is LinkLabel || (control is Label && control.Text == "附件列表:") || control is Button) { control.Dispose(); } } } subject.Text = null; sender_email.Text = null; Date.Text = null; content.Text = null; string cmdData = "quit" + "\r\n"; byte[] szData = System.Text.Encoding.ASCII.GetBytes(cmdData.ToCharArray()); StrmWtr.Write(szData, 0, szData.Length); //Console.WriteLine(StrmRdr.ReadLine()); sign_in sign_in_wnd = new sign_in(); //删除账户 for (int i = current_index; i <= account_index - 1; i++) { accounts[i] = accounts[i + 1]; } accounts[account_index].email_address = null; accounts[account_index].password = null; accounts[account_index].pop3_server_address = null; accounts[account_index].smtp_server_address = null; account_index--; Hide(); sign_in_wnd.ShowDialog(); Show(); }
private void MainWnd_Load(object sender, EventArgs e) { overview.AutoScroll = true; details.AutoScroll = true; account_index = -1; //accounts.dat存储账户信息,如果该文件为空,说明没有账户信息,此时需要弹出登录窗口 sign_in sign_in_wnd = new sign_in(); FileStream file_temp = new FileStream(@"accounts.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); StreamReader file_read_temp = new StreamReader(file_temp); hasAccount = file_read_temp.ReadLine(); file_read_temp.Close(); file_temp.Close(); if (hasAccount == null) { Close(); sign_in_wnd.ShowDialog(); Show(); isLoggedIn = true; } else { string info; FileStream file = new FileStream(@"accounts.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); StreamReader file_read = new StreamReader(file); //读出控制信息 isAutomaticLogin = (Convert.ToInt32(file_read.ReadLine()) == 1) ? true : false; current_index = Convert.ToInt32(file_read.ReadLine()); info = file_read.ReadLine(); int i = 0;//i是计次变量 while (info != null) { switch (i % 4) { case 0: accounts[i / 4].email_address = info; break; case 1: accounts[i / 4].password = info; break; case 2: accounts[i / 4].pop3_server_address = info; break; case 3: accounts[i / 4].smtp_server_address = info; break; } i++; info = file_read.ReadLine(); } file_read.Close(); file.Close(); account_index = i / 4 - 1;//此时account_index为实际最后一个账户的索引数(从0开始) //如果isAutomaticLogin为false,说明不自动登录,也需要弹出登录窗口 if (isAutomaticLogin == false) { Hide(); sign_in_wnd.ShowDialog(); Show(); isLoggedIn = true; mails = new List <mail>(); int count = numberOfEmails; while (count > 0) { String cmdData; byte[] szData; string szTemp; StringBuilder str = new StringBuilder(); const String CRLF = "\r\n"; cmdData = "RETR " + count + CRLF; szData = Encoding.ASCII.GetBytes(cmdData.ToCharArray()); StrmWtr.Write(szData, 0, szData.Length); szTemp = getSatus(StrmRdr); if (szTemp[0] != '-') { while (szTemp != ".") { str.Append(szTemp + "\r\n"); szTemp = StrmRdr.ReadLine(); } } String a = str.ToString(); mail mail = new mail(a); mails.Add(mail); count--; } } else //自动登录,先连接 { //POP3_socket连接 TcpClient Server; NetworkStream StrmWtr; StreamReader StrmRdr; byte[] szData; String cmdData; const String CRLF = "\r\n"; Server = new TcpClient(accounts[current_index].pop3_server_address, 110); try { StrmWtr = Server.GetStream(); StrmRdr = new StreamReader(Server.GetStream()); cmdData = "USER " + accounts[current_index].email_address + CRLF; szData = Encoding.ASCII.GetBytes(cmdData.ToCharArray()); StrmWtr.Write(szData, 0, szData.Length); StrmRdr.ReadLine(); cmdData = "PASS " + accounts[current_index].password + CRLF; szData = Encoding.ASCII.GetBytes(cmdData.ToCharArray()); StrmWtr.Write(szData, 0, szData.Length); StrmRdr.ReadLine(); cmdData = "STAT" + CRLF; szData = Encoding.ASCII.GetBytes(cmdData.ToCharArray()); StrmWtr.Write(szData, 0, szData.Length); string s = StrmRdr.ReadLine(); //Console.WriteLine(s); if (s[0] == '-') { MessageBox.Show("POP3连接时出错,请检查您的账户和授权码"); return; } MainWnd.StrmWtr = StrmWtr; MainWnd.StrmRdr = StrmRdr; numberOfEmails = getNum(StrmRdr.ReadLine()); } catch (InvalidOperationException err) { Console.WriteLine("ERROR: " + err.Message.ToString()); } //SMTP SM.Connect(accounts[current_index].smtp_server_address); cmd = "HELO " + accounts[current_index].smtp_server_address + CRLF; SM.sendMessage(cmd); cmd = "AUTH LOGIN" + CRLF; SM.sendMessage(cmd); cmd = Convert.ToBase64String(Encoding.ASCII.GetBytes(accounts[current_index].email_address)) + CRLF; SM.sendMessage(cmd); cmd = Convert.ToBase64String(Encoding.ASCII.GetBytes(accounts[current_index].password)) + CRLF; SM.sendMessage(cmd); mails = new List <mail>(); int count = numberOfEmails; while (count > 0) { string cmdData_1; byte[] szData_1; string szTemp; StringBuilder str = new StringBuilder(); const String CRLF_1 = "\r\n"; cmdData_1 = "RETR " + count + CRLF_1; szData_1 = Encoding.ASCII.GetBytes(cmdData_1.ToCharArray()); MainWnd.StrmWtr.Write(szData_1, 0, szData_1.Length); szTemp = getSatus(MainWnd.StrmRdr); if (szTemp[0] != '-') { while (szTemp != ".") { str.Append(szTemp + "\r\n"); szTemp = MainWnd.StrmRdr.ReadLine(); } } String a = str.ToString(); mail mail = new mail(a); mails.Add(mail); count--; } } } }