Exemple #1
0
        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();
        }
Exemple #2
0
        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();
        }
Exemple #3
0
        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--;
                    }
                }
            }
        }