Form1.cs
上传用户:shjujing
上传日期:2022-07-28
资源大小:11244k
文件大小:7k
源码类别:

Email客户端

开发平台:

Visual C++

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. using System.Net;
  8. using System.Net.Sockets;
  9. using System.IO;
  10. using System.Text;
  11. namespace Vc_编写邮件接收程序
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         public TcpClient Server;        //用以和服务器建立TCP连接
  16.         public NetworkStream NetStrm;   //客户机和服务器会话使用的数据流
  17.         public StreamReader RdStrm;     //用以操作数据流,从数据流中获取从服务器反馈的数据
  18.         public string Data;
  19.         public byte[] szData;
  20.         public string CRLF = "rn";
  21.        
  22.         public Form1()
  23.         {
  24.             InitializeComponent();
  25.         }
  26.         //连接服务器
  27.         private void ConnectBtn_Click(object sender, EventArgs e)
  28.         {
  29.             Cursor cr = Cursor.Current;
  30.             Cursor.Current = Cursors.WaitCursor;
  31.             Server = new TcpClient(POPServ.Text, 110);
  32.             //建立和POP3的TCP连接
  33.             string RecString;
  34.             try
  35.             {
  36.                 NetStrm = Server.GetStream();
  37.                 //获取客户机和服务器会话的数据流
  38.                 RdStrm = new StreamReader(Server.GetStream(), Encoding.GetEncoding("gb2312"));
  39.                 RecString = RdStrm.ReadLine();
  40.                 MessageBox.Show(RecString);
  41.                 Data = "USER " + User.Text + CRLF;
  42.                 //定义传送帐户名称的命令
  43.                 szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
  44.                 NetStrm.Write(szData, 0, szData.Length);
  45.                 //向服务器传送帐户
  46.                 RecString = RdStrm.ReadLine();
  47.                 //接收服务器反馈数据
  48.                 MessageBox.Show(RecString);
  49.                 Data = "PASS " + Passw.Text + CRLF;
  50.                 //定义帐户对应的口令的命令
  51.                 szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
  52.                 NetStrm.Write(szData, 0, szData.Length);
  53.                 //向服务器传送帐户的口令
  54.                 RecString = RdStrm.ReadLine();
  55.                 //接收服务器反馈数据
  56.                 MessageBox.Show(RecString);
  57.                 Data = "STAT" + CRLF;
  58.                 //定义获取邮箱中邮件数目和占用空间的命令
  59.                 szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
  60.                 NetStrm.Write(szData, 0, szData.Length);
  61.                 //传送胡琴邮箱中邮件数目和占用空间的命令
  62.                 RecString = RdStrm.ReadLine();
  63.                 MessageBox.Show(RecString);
  64.                 //接收服务器反馈的数据
  65.                 String[] Num = RecString.Split(' ');
  66.                 if (Int32.Parse(Num[1]) > 0)
  67.                 {
  68.                     statusBar1.Text = "邮件数目:" + Num[1] + ",所占空间:" + Num[2] + "字节";
  69.                     numericUpDown1.Maximum = Int32.Parse(Num[1]);
  70.                     ConnectBtn.Enabled = false;
  71.                     DisconnectBtn.Enabled = true;
  72.                     RetrieveBtn.Enabled = true;
  73.                 }
  74.                 else
  75.                     MessageBox.Show("邮箱中没有邮件!");
  76.                 //以上是解析STAT命令后服务器反馈的数据,并通过状态条显示出来
  77.             }
  78.             catch (InvalidOperationException err)
  79.             {
  80.                 statusBar1.Text = "错误: " + err.ToString();
  81.             }
  82.             Cursor.Current = cr;
  83.         }
  84.         //断开服务器
  85.         private void DisconnectBtn_Click(object sender, EventArgs e)
  86.         {
  87.             string RecString;
  88.             Cursor cr = Cursor.Current;
  89.             Cursor.Current = Cursors.WaitCursor;
  90.             Data = "QUIT" + CRLF;
  91.             //定义关闭会话命令
  92.             szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
  93.             NetStrm.Write(szData, 0, szData.Length);
  94.             //向服务器发送命令
  95.             RecString = RdStrm.ReadLine();
  96.             //接收服务器反馈数据
  97.             NetStrm.Close();
  98.             RdStrm.Close();
  99.             //关闭资源
  100.             ConnectBtn.Enabled = true;
  101.             DisconnectBtn.Enabled = false;
  102.             RetrieveBtn.Enabled = false;
  103.             Cursor.Current = cr;
  104.         }
  105.         //接收邮件中的内容
  106.         private void RetrieveBtn_Click(object sender, EventArgs e)
  107.         {
  108.             Cursor cr = Cursor.Current;
  109.             Cursor.Current = Cursors.WaitCursor;
  110.             string szTemp;
  111.             String[] arrTemp;
  112.             bool strBody = false;
  113.             String[] arrRet = new String[10];
  114.             Message.Clear();
  115.             //清除邮件内容显示区
  116.             try
  117.             {
  118.                 Data = "RETR " + numericUpDown1.Value.ToString() + CRLF;
  119.                 // 定义接收邮箱中的第几封邮件的命令
  120.                 szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
  121.                 NetStrm.Write(szData, 0, szData.Length);
  122.                 //向服务器发送接收邮件命令
  123.                 szTemp = RdStrm.ReadLine();
  124.                 MessageBox.Show(szTemp);
  125.                 Message.Text=szTemp;
  126.                 /*if (szTemp[0] != '-')
  127.                 {
  128.                     //解析接收的邮件内容,并按条目不同显示
  129.                     while (szTemp != ".")
  130.                     {
  131.                         arrTemp = szTemp.Split(":".ToCharArray());
  132.                         if (szTemp == "")
  133.                             strBody = true;
  134.                         if (arrTemp[0] == "Date")
  135.                             arrRet[1] = arrTemp[1];
  136.                         if (arrTemp[0] == "From")
  137.                             arrRet[2] = arrTemp[1];
  138.                         if (arrTemp[0] == "To")
  139.                             arrRet[3] = arrTemp[1];
  140.                         if (arrTemp[0] == "Subject")
  141.                             arrRet[4] = arrTemp[1];
  142.                         if (strBody)
  143.                             arrRet[5] = arrRet[5] + szTemp;
  144.                         Message.Text = "发送时间:" + arrRet[1] + CRLF;
  145.                         //显示邮件发送时间信息
  146.                         Message.Text = Message.Text + "发送者:" + arrRet[2] + CRLF;
  147.                         //显示发信人
  148.                         Message.Text = Message.Text + "接收者:" + arrRet[3] + CRLF;
  149.                         //显示目的地址
  150.                         Message.Text = Message.Text + "主题:" + arrRet[4] + CRLF;
  151.                         //显示邮件主题
  152.                         Message.Text = Message.Text + "内容:" + arrRet[5] + CRLF;
  153.                         //显示邮件内容
  154.                         szTemp = RdStrm.ReadLine();
  155.                     }
  156.                 }*/
  157.                 Cursor.Current = cr;
  158.                 //回复光标
  159.             }
  160.             catch (InvalidOperationException err)
  161.             {
  162.                 statusBar1.Text = "错误: " + err.ToString();
  163.             }
  164.         }
  165.     }
  166. }