程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C# POP3編程 代碼

C# POP3編程 代碼

編輯:關於C#
 

POP3的使用很簡單,所以.net沒有向SMTP那樣給出相應的類來控制.

廢話少說,程序員最需要的使代碼,:)!

1.打開VS.NET 2003.

2.新建一個WinForm Application.

3.添加命名空間

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;

4.主要代碼

為了防止界面在連接服務器時死鎖,我另開了一個線程

private void button1_Click(object sender, System.EventArgs e)
{
Thread myThread=new Thread(new ThreadStart(TreadGet));
myThread.Start();
}

private void TreadGet()
{
ConnectToServer();
LogonServer();
GetEmailList();
}

//連接服務器
private void ConnectToServer()
{
this.myClient=new TcpClient();
try
{
this.myClient.Connect(this.serverNameTextBox.Text,110);
this.messageListBox.Items.Add("連接服務器成功");
//初始化網絡流,數據就是通過這個對象讀出來的
ns=this.myClient.GetStream();
sr=new StreamReader(ns);
sw=new StreamWriter(ns);
}
catch(Exception ex)
{
this.messageListBox.Items.Add(ex.Message);
}
}
//驗證用戶名,密碼
private void LogonServer()
{
result=sr.ReadLine();
this.messageListBox.Items.Add(result);
sw.WriteLine("USER "+this.nameTextBox.Text);
sw.Flush();

result=sr.ReadLine();
if(result.Substring(0,3)=="-ER")
{
this.messageListBox.Items.Add("沒有這個用戶名");
return;
}

sw.WriteLine("PASS "+this.passTextBox.Text);
sw.Flush();

try
{
result=sr.ReadLine();
}
catch(IOException ioex)
{
this.messageListBox.Items.Add(ioex.Message);
return;
}

if(result.Substring(0,4)=="-ERR")
{
this.messageListBox.Items.Add("無法登錄,可能使用戶名密碼錯誤!");
return;
}

this.messageListBox.Items.Add("登錄成功");

}

//獲取郵件列表
private void GetEmailList()
{
string from=null;
string subject=null;
sw.WriteLine("stat");
sw.Flush();

result=sr.ReadLine();
// MessageBox.Show(result);
string[] nummessage=result.Split(' ');
int totalnum=Convert.ToInt32(nummessage[1]);
if(totalnum>0)
this.messageListBox.Items.Add("你有"+totalnum.ToString()+"郵件");
else
this.messageListBox.Items.Add("郵箱裡沒有郵件");

for(int i=1;i<=totalnum;i++)
{
sw.WriteLine("top "+i.ToString()+" 0");
sw.Flush();
result=sr.ReadLine();

while(true)
{
result=sr.ReadLine();
if(result==".")
break;
if(result.Length>4)
{
if(result.Substring(0,5)=="From:")
from=result ;
if(result.Substring(0,8)=="Subject:")
subject=result ;

}
}


this.listBox1 .Items.Add(i.ToString()+" "+from+ " "+ subject);

}
}

private void button2_Click(object sender, System.EventArgs e)
{
this.listBox1.Items.Clear();
}


參考資料

網絡郵件收取使用的是Pop3協議,了解Pop3協議有助於我們加深對郵件系統的理解。而且使用Pop3協議你還可以直接telnet 到郵件服務器上去收信。

  一般telnet Pop3 Server 110後就可以用這些命令了,大小寫不敏感, 不包括口令本身,注意不要讓口令回顯,等驗證通過後再允許回顯好了。

  user username 用戶認可

  pass password 認可 執行成功則狀態轉換

  apop name,digest 認可一種安全傳輸口令的辦法,執行成功導致狀態轉換,請參見RFC 1321 。

  stat 處理請求server回送郵箱統計資料,如郵件數、 郵件總字節數

  uidl n 處理 server返回用於該指定郵件的唯一標識, 如果沒有指定,返回所有的。

  list n 處理 server返回指定郵件的大小等

  retr n 處理 server返回郵件的全部文本

  dele n 處理 server標記刪除,quit命令執行時才真正刪除

  rset 處理撤消所有的dele命令

  top n,m 處理 返回n號郵件的前m行內容,m必須是自然數

  noop 處理 server返回一個肯定的響應

  quit client 希望結束會話。如果server處於"處理" 狀態,則現在進入"更新"狀態,刪除那些標記成刪除的郵件。如果server處於"認可"狀態, 則結束會話時server不進入"更新"狀態 。

  使用telnet 的一個完整的收信例子如下:

  telnet pop3Server 110
  user username
  pass ****
  stat
  list
  retr 1
  retr 2
  ...
  dele 1
  dele 2
  ...
  quit

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved