?? formreceivemail.cs
字號:
?using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//添加的命名空間引用
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace ReceiveMailExample
{
public partial class FormReceiveMail : Form
{
private string pop3Server;
private TcpClient tcpClient;
private NetworkStream networkStream;
private StreamReader sr;
private StreamWriter sw;
public FormReceiveMail()
{
InitializeComponent();
}
//單擊建立連接按鈕觸發的事件
private void buttonConnect_Click(object sender, EventArgs e)
{
//設置鼠標光標為等待狀態
Cursor.Current = Cursors.WaitCursor;
try
{
int index = textBoxUser.Text.IndexOf('@');
//大部分pop3服務器都加前綴pop3.,這里僅獲取這種服務器
//對不以pop3.為前綴的這個例子未進行處理
pop3Server = "pop3." + textBoxUser.Text.Substring(index + 1);
//建立與POP3服務器的連接,使用默認端口110
tcpClient = new TcpClient(pop3Server, 110);
listBoxStatus.Items.Add("與pop3服務器連接成功");
}
catch
{
MessageBox.Show("與服務器連接失敗");
return;
}
string str;
listBoxStatus.Items.Clear();
//獲取 Networkstream對象,以便通過建立好的連接發送和接收數據
networkStream = tcpClient.GetStream();
//得到讀對象,并查找字節順序標記,防止顯示亂碼
sr = new StreamReader(networkStream);
//得到寫對象
sw = new StreamWriter(networkStream);
//讀取服務器回送的連接信息
if (ReadDataFromServer() == null) return;
//向服務器發送用戶名,請求確認
if (SendDataToServer("USER " + textBoxUser.Text) == false) return;
if (ReadDataFromServer() == null) return;
//向服務器發送密碼,請求確認
if (SendDataToServer("PASS " + textBoxPassword.Text) == false) return;
if (ReadDataFromServer() == null) return;
//向服務器發送STAT命令,請求獲取郵件總數和總字節數
if (SendDataToServer("LIST") == false) return;
if ((str = ReadDataFromServer()) == null) return;
string[] splitString = str.Split(' ');
//從字符串中取子串獲取郵件總數
int count = int.Parse(splitString[1]);
//判斷郵箱中是否有郵件
if (count > 0)
{
//設置對應狀態信息
buttonRead.Enabled = true;
buttonDelete.Enabled = true;
listBoxOperation.Items.Clear();
groupBoxOperation.Text = "信箱中共有 " + splitString[1] + " 封郵件";
//向郵件列表框中添加郵件
for (int i = 0; i < count; i++)
{
if ((str = ReadDataFromServer()) == null) return;
splitString = str.Split(' ');
listBoxOperation.Items.Add(string.Format(
"第{0}封郵件,{1}字節", splitString[0], splitString[1]));
}
listBoxOperation.SelectedIndex = 0;
//讀出結束符
if ((str = ReadDataFromServer()) == null) return;
}
else
{
groupBoxOperation.Text = "信箱中沒有郵件";
buttonRead.Enabled = false;
buttonDelete.Enabled = false;
}
buttonConnect.Enabled = false;
buttonDisconnect.Enabled = true;
//設置鼠標光標為默認光標
Cursor.Current = Cursors.Default;
}
//向服務器發送信息
private bool SendDataToServer(string str)
{
try
{
sw.WriteLine(str);
sw.Flush();
listBoxStatus.Items.Add("發送:" + str);
return true;
}
catch (Exception err)
{
MessageBox.Show(err.Message, "發送 " + str + " 失敗");
return false;
}
}
//從網絡流中讀取服務器回送的信息
private string ReadDataFromServer()
{
//從流中讀取服務器返回的信息,寫入信息列表框
string str = null;
try
{
str = sr.ReadLine();
listBoxStatus.Items.Add("收到:" + str);
//如果是-ERR,表明有錯
if (str[0] == '-')
{
MessageBox.Show(str, "有錯了");
str = null;
}
}
catch (Exception err)
{
MessageBox.Show(err.Message, "無法讀取");
}
return str;
}
//單擊斷開連接按鈕觸發的事件
private void buttonDisconnect_Click(object sender, EventArgs e)
{
//向服務器發送QUIT命令
SendDataToServer("QUIT");
sr.Close();
sw.Close();
networkStream.Close();
tcpClient.Close();
listBoxOperation.Items.Clear();
richTextBox1.Clear();
listBoxStatus.Items.Clear();
buttonConnect.Enabled = true;
buttonDisconnect.Enabled = false;
}
//單擊閱讀信件按鈕觸發的事件
private void buttonRead_Click(object sender, EventArgs e)
{
//設置鼠標光標為等待狀態
Cursor.Current = Cursors.WaitCursor;
string mailMessage = listBoxOperation.SelectedItem.ToString();
mailMessage = mailMessage.Substring(1, mailMessage.IndexOf("封") - 1);
if (SendDataToServer("RETR " + mailMessage) == false) return;
string receiveData = sr.ReadToEnd();
//例子未進行解碼處理
//而僅僅將源代碼原樣顯示出來,所以看到的涉及具體內容的信息將會是亂碼
richTextBox1.Text = "源代碼:\r\n";
richTextBox1.AppendText(receiveData);
//設置鼠標光標為默認光標
Cursor.Current = Cursors.Default;
}
//單擊刪除信件按鈕觸發的事件
private void buttonDelete_Click(object sender, EventArgs e)
{
string str = listBoxOperation.SelectedItem.ToString();
str = str.Substring(1, str.IndexOf("封") - 1);
if (SendDataToServer("DELE " + str) == true)
{
richTextBox1.Clear();
int j = listBoxOperation.SelectedIndex;
listBoxOperation.Items.Remove(listBoxOperation.Items[j].ToString());
MessageBox.Show("刪除成功", "恭喜");
}
}
private void FormReceiveMail_Load(object sender, EventArgs e)
{
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -