基于POP3與SMTP協(xié)議的郵件收發(fā)程序的開發(fā)_第1頁
基于POP3與SMTP協(xié)議的郵件收發(fā)程序的開發(fā)_第2頁
基于POP3與SMTP協(xié)議的郵件收發(fā)程序的開發(fā)_第3頁
基于POP3與SMTP協(xié)議的郵件收發(fā)程序的開發(fā)_第4頁
基于POP3與SMTP協(xié)議的郵件收發(fā)程序的開發(fā)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、一、設計思想電子郵件指用電子手段傳送信件、單據(jù)、資料等信息的通信方法。電子郵件綜合了電話通信和郵政信件的特點,它傳送信息的速度和電話一樣快,又能象信件一樣使收信者在接收端收到文字記錄。電子郵件系統(tǒng)又稱基于計算機的郵件報文系統(tǒng)。它承擔從郵件進入系統(tǒng)到郵件到達目的地為止的全部處理過程。電子郵件不僅可利用電話網(wǎng)絡,而且可利用任何通信網(wǎng)傳送。在利用電話網(wǎng)絡時,還可利用其非高峰期間傳送信息,這對于商業(yè)郵件具有特殊價 值。由中央計算機和小型計算機控制的面向有限用戶的電子系統(tǒng)可以看作是一種計算機會議 系統(tǒng)。電子郵件的工作過程遵循客戶-服務器模式。每份電子郵件的發(fā)送都要涉及到發(fā)送方與接收方,發(fā)送方式構成客戶端

2、,而接收方構成服務器,服務器含有眾多用戶的電子信箱。發(fā)送方通過郵件客戶程序,將編輯好的電子郵件向郵局服務器(SMTP服務器)發(fā)送。郵局服務器識別接收者的地址,并向管理該地址的郵件服務器(POP3服務器)發(fā)送消息。一個郵件系統(tǒng)的傳輸包含用戶代理User Agent傳輸代理TransferAgent 及接受代理DeliveryAgent 三大部分。用戶代理是一個用戶發(fā)信和收信的程序,負責將電子郵件按照一定的標準包裝,然后送至郵件服務器,或由郵件服務器收回。傳輸代理負責信件的交換和傳輸。將信件傳送至適當 的郵件主機,再由接受代理將信件分發(fā)至不同的郵件信箱。傳輸代理必須要能夠接受用戶郵 件程序送來的信

3、件,解讀收信人的地址,根據(jù)SMT的議將它正確無誤地傳遞到目的地。現(xiàn)在 一般的傳輸代理已采用Sendmail程序完成工作。電子郵件到達郵件主機后,在經(jīng)接收代理PO的議被用戶讀取至自己的主機。電子郵件在發(fā)送與接收過程中都要遵循SMTP POP3?協(xié)議,這些協(xié)議確保了電子郵件在各種不同系統(tǒng)之間的傳輸。 其中,SMT密責電子郵件的發(fā)送,而POP測用于接收Internet 上的電子郵件。SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地 址到目的地址傳送郵件的規(guī)則 ,由它來控制信件的中轉方式。SMT附議屬于TCP/ IP協(xié)議族, 它幫助每臺計算機

4、在發(fā)送或中轉信件時找到下一個目的地。通過SMT項、議所指定的服務器,我們就可以把E-mail寄到收信人的服務器上了 ,整個過程只要幾分鐘。SMTFW務器則是遵 循SMT項、議的發(fā)送郵件服務器,用來發(fā)送或中轉你發(fā)出的電子郵件。POP3(Post Office Protocol3)即郵局協(xié)議,目前已發(fā)展到第三版,稱POP3它規(guī)定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標準,POP3允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP期艮務器則是遵循 POP的議的接收郵件服務器,用

5、來接收電子郵件的??偟膩碚fPOP3協(xié)議是讓用戶把服務器上的信收到本地來所需要的一種協(xié)議。本程序為一個基于 SMT林口 POP3協(xié)議的小型EMAIL收發(fā)程序,簡單的實現(xiàn)了郵件的收發(fā) 功能。教育資料算法流程圖圖1算法流程圖三、源代碼下面給出的是用登錄程序的源代碼:導入名字空間包含定義各種對象集合的接口和類using System;/using System.Collections.Generic;/using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;包含表示ASCII等字符編碼的類

6、using System.Text;/using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.IO;namespace MailSendOfRecive/命名空間public partial class Form3 : Form/定義類/定義用戶名、密碼public string Conn,Uname,Pwd,Inf;public TcpClient Server;/定義服務器public NetworkStream NetStrm;public StreamReader RdStrm;

7、public Boolean BPass;/定義BPasspublic string Data;public byte口 szData;public string CRLF = rn;/定義快捷鍵public Form2 Sender;public Form3()/定義框架InitializeComponent();/初始化private void Login_Click(object sender, EventArgs e)Conn = pop.+textBox1.Text.Trim();Uname = textBox2.Text.Trim();/用戶名Pwd = textBox3.Text

8、;/密碼Server = new TcpClient(Conn, 110);/服務器tryNetStrm = Server.GetStream();RdStrm = new StreamReader(Server.GetStream(), System.Text.Encoding.Default);RdStrm.ReadLine();Data = USER + Uname + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data);/獲取ASCII值NetStrm.Write(szData,0,szData.Length);RdStrm.

9、ReadLine();Data = PASS + Pwd + CRLF;/讀取字符并返回szData = System.Text.Encoding.ASCII.GetBytes(Data);NetStrm.Write(szData,0,szData.Length);Inf = RdStrm.ReadLine();if (Inf.IndexOf(+OK)-1)BPass = true;/布爾值設為真Sender = new Form2(Uname, Pwd, textBox1.Text);this.Hide();Sender.Show(); else if (Inf.IndexOf(-OK)-1

10、)/判斷索引MessageBox.Show(密碼或者用戶名錯誤,用戶驗證)/文本框顯示信息Data = QUIT;szData = System.Text.Encoding.ASCII.GetBytes(Data);NetStrm.Write(szData, 0, szData.Length); /catch (System.Exception ex)MessageBox.Show(ex.Message);/private void Form3_Load(object sender, EventArgs e)/寫入數(shù)據(jù)文本框顯示信息定義 Form3_Load下面是發(fā)送郵件程序源代碼using

11、System;/using System.Collections.Generic;/using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;/using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.IO;using System.Collections;using System.Data.OleDb;namespace MailSendOf

12、Recive/ public partial class Form1 : Form/TcpClient smtpSrv;NetworkStream netStm;/string CRLF = rn;public List SMail = new List(); public Form2 fa;public string Ua, Pw, Sv;導入名字空間包含定義各種對象集合的接口和類包含表示ASCII等字符編碼的類命名空間定義類提供數(shù)據(jù)流創(chuàng)建Forml初始化表示結束將字符串轉為字節(jié)數(shù)組寫入網(wǎng)絡連接服務器輸出字符串轉換成base64編碼定義布爾變量轉換數(shù)據(jù)類型顯示錯誤定義 WritInfpubl

13、ic Form1(Form2 f,string UN,string Pd,string SR) /fa = f;Ua = UN;Pw = Pd;Sv = SR;InitializeComponent();/ public void WriteStream(string strCmd) strCmd += CRLF;/crlfbyte口 bw = System.Text.Encoding.Default.GetBytes(strCmd); / netStm.Write(bw,0,bw.Length);/ private string AuthStream(string strCmd)/ try

14、byte口 by = System.Text.Encoding.Default.GetBytes(strCmd);strCmd = Convert.ToBase64String(by);/catch (System.Exception ex)return ex.ToString();return strCmd;public bool tryTran( ref string a)/string b =;b = a;trybyte outputb = Convert.FromBase64String(a); /a = Encoding.Default.GetString(outputb);retu

15、rn true;catch (System.Exception ex)/ a= b; return false; public void WritInf(string s)/tryTran(ref s);listBoxMsg.Items.Add(s);private void ButtonSend_Click(object sender, EventArgs e) /定義 ButtonSend_ClicklistBoxMsg.Items.Clear();/存放 smtp 服務器返回的信息trystring data;progressBar1.Visible = true;progressBar

16、1.Value = 1;smtpSrv = new TcpClient(smtp.+Sv,25);TextBoxSer.Text,25);/連接smtp服務器數(shù)據(jù)netStm = smtpSrv.GetStream();/取彳N Networkstream 對象,來發(fā)送接收StreamReader rdStrm = new StreamReader(smtpSrv.GetStream();/產(chǎn)生StreamReader來讀取數(shù)據(jù)流WriteStream(EHLO Local);/progressBar1.Value+; listBoxMsg.Items.Add(輸入用戶名開始);發(fā)送命令建立連

17、接WriteStream(AUTH LOGIN);/listBoxMsg.Items.Add(rdStrm.ReadLine(); progressBar1.Value+;發(fā)送命令請求驗證data = AuthStream(Ua);/data);/轉換編碼格式WriteStream(data);/listBoxMsg.Items.Add(rdStrm.ReadLine();發(fā)送用戶名data = AuthStream(Pw);/data);/轉換編碼格式WriteStream(data);/listBoxMsg.Items.Add(rdStrm.ReadLine(); progressBar1

18、.Value+;發(fā)送data = MAIL FROM:;/WriteStream(data);listBoxMsg.Items.Add(rdStrm.ReadLine();progressBar1.Value+;發(fā)件人地址data = RCPT TO:;/WriteStream(data);listBoxMsg.Items.Add(rdStrm.ReadLine();progressBar1.Value+;收件人地址WriteStream(DATA);/listBoxMsg.Items.Add(rdStrm.ReadLine(); progressBar1.Value+;數(shù)據(jù)data = Da

19、te:+System.DateTime.Now;/WriteStream(data);日期progressBaValue+; data = From: + TextBoxSend.Text; WriteStream(data); progressBar1.Value+; data = To: + TextBoxRev.Text;/WriteStream(data); progressBar1.Value+; data = SUBJECT: + textBoxSubject.Text; / WriteStream(data); progressBar1.Value+; data = Reply-

20、To: + TextBoxSend.Text; / WriteStream(data); progressBar1.Value+; WriteStream();/progressBar1.Value+; WriteStream(textBoxMailText.Text);progressBar1.Value+;WriteStream(.);/progressBar1.Value+; listBoxMsg.Items.Add(rdStrm.ReadLine(); WriteStream(QUIT);/progressBar1.Value+; listBoxMsg.Items.Add(rdStrm

21、.ReadLine(); / netStm.Close(); rdStrm.Close();/MailInfo i = new MailInfo(); i.sender = TextBoxSend.Text; i.geter = TextBoxRev.Text; i.Ttile = textBoxSubject.Text; i.NeiRong = textBoxMailText.Text; i.Datatime = DateTime.Now.ToString();面SMail.Add(i);MessageBox.Show(郵件發(fā)送成功,成功) catch (System.Exception e

22、x) MessageBox.Show(ex.ToString(), 操作錯誤); /發(fā)送者接收者主題發(fā)送回復地址表示首部結束,開始正文點表示郵件內(nèi)容結束斷開添加項釋放資源/將發(fā)送的消息送到SMail便于傳個收件箱界/顯示信息/ 顯示信息private void Form1_FormClosed(object sender, FormClosedEventArgs e)Application.Exit();/終止所有程序private void button1_Click(object sender, EventArgs e)this.Hide();/隱藏控件fa.Show();fa.GetSe

23、nMail(SMail);private void Form1_Load(object sender, EventArgs e)導入名字空間包含定義各種對象集合的接口和類下面是接收郵件程序源代碼using System;/using System.Collections.Generic;/using System.ComponentModel; using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;/using

24、System.Net.Mail;using System.Net.Sockets;using System.IO;using System.Collections;namespace MailSendOfRecive/ public partial class Form2 : Form/ public TcpClient Server;/public NetworkStream NetStrm; public StreamReader RdStrm;public string Data,UsName,Pawd,InEmai;public byte szData,other;public Lis

25、t EMail = new List(); / public List DMail = new List();public List SndMail = new List(); public string CRLF = rn;public FileStream fs; public int InfoID,BackId;public int DeleTxt = -1;/包含表示ASCII等字符編碼的類命名空間定義類定義服務器鏈表類聲明寫入流DataTable dt = new DataTable();/數(shù)據(jù)表了,類似于數(shù)據(jù)庫,可以存放數(shù)public Form2(string Uname,stri

26、ng Pwd,string IEM) InfoID = -1;InEmai = IEM;/pop.+IEM;UsName = Uname;Pawd = Pwd;/初始化為網(wǎng)格添加標題InitializeComponent();Inint();/ dt.Columns.Add(ID, typeof(int);dt.Columns.Add(dt.Columns.Add(dt.Columns.Add( dt.Columns.Add( 主題”,typeof(string);發(fā)件人, typeof(string);時間,typeof(string);含有附件, typeof(Boolean);/創(chuàng)建對象

27、private void Inint()/初始化節(jié)點TreeNode Node = treeView1.Nodes.Add(Name,郵件歸檔系統(tǒng));Node.Nodes.Add(Send, 發(fā)件箱);Node.Nodes.Add(Recove, 收件箱);/獲取對象的集合Node.Nodes.Add(GuiDang,郵件歸檔);Node.Nodes.Add(HuiShou, 回收站);private void ShowInfo()private void buttonCon_Click(object sender, EventArgs e)/定義點擊事件Server = new TcpCli

28、ent(pop.+InEmai, 110);/初始化服務器向列表添加項獲取編碼獲取編碼獲取所有的郵件的大小try NetStrm = Server.GetStream();RdStrm = new StreamReader(NetStrm,System.Text.Encoding.Default);listBoxStatus.Items.Add(RdStrm.ReadLine(); /Data = USER + UsName + CRLF;/textBoxUser.Text+CRLF;szData = System.Text.Encoding.Default.GetBytes(Data); /

29、NetStrm.Write(szData,0,szData.Length);listBoxStatus.Items.Add(RdStrm.ReadLine();Data = PASS + Pawd + CRLF;/textBoxPwd.Text+CRLF;szData = System.Text.Encoding.Default.GetBytes(Data); /NetStrm.Write(szData,0,szData.Length);listBoxStatus.Items.Add(RdStrm.ReadLine(); /獲取編碼寫入數(shù)據(jù)顯示消息框檢索字符串設置控件屬性對象添加到結尾控件設為

30、不可用控件設為不可用控件設為不可用顯示消息框按ID讀取郵件并進行解析追加文本Data = STAT + CRLF;szData = System.Text.Encoding.Default.GetBytes(Data); / NetStrm.Write(szData,0,szData.Length);/string st = RdStrm.ReadLine(); MessageBox.Show(st);/listBoxStatus.Items.Add(st); st = st.Substring(4, 2);/MessageBox.Show(st); int Cout = Int32.Pars

31、e(st); if (Cout0) buttonDel.Enabled = true;/for (int i = 0; i -1) string st = InfoID.ToString(); dt.Rows.Remove(dt.RowsDeleTxt); dataGridView1.DataSource = dt; richTexOfInfo.Text =;MessageBox.Show(刪除操作成功,操作成功)/顯示信息 catch (System.Exception ex)/顯示錯誤 MessageBox.Show(ex.Message);/顯示信息 private void treeV

32、iew1_AfterSelect(object sender, TreeViewEventArgs e) /選擇點擊樹節(jié)點時觸發(fā)的事件 dt.Clear(); richTexOfInfo.Text = SndMailConvert.ToInt32(e.Node.Name).NeiRong; if (dt.Rows.Count0)this.dataGridViewl.DataSource = dt;/獲取數(shù)據(jù)源 elseprivate void GuiButton_Click(object sender, EventArgs e) /進行歸檔treeView1.NodesName.NodesGu

33、iDang.Nodes.Add(ShiYang,實驗報告);/獲取樹節(jié)點集合treeView1.NodesName.NodesGuiDang.Nodes.Add(Other,其他郵件);foreach (MailInfo a in EMail) if (a.Ttile.IndexOf(實驗報告) 0)treeView1.NodesName.NodesGuiDang.NodesShiYang.Nodes.Add(a.sender, a.sender);/獲取樹節(jié)點集合elsetreeView1.NodesName.NodesGuiDang.NodesOther.Nodes.Add(a.sende

34、r,a.sender);GuiButton.Enabled = false;/控件設為不可用privatevoiddataGridView1_RowHeaderMouseClick(objectsender,DataGridViewCellMouseEventArgs e)/DeleTxt = e.RowIndex;/InfoID = (int)this.dataGridView10, e.RowIndex.Value; /點擊表格時觸發(fā)的事件獲取索引獲取值foreach (MailInfo a in EMail)if (a.id = InfoID) richTexOfInfo.Text =

35、a.NeiRong;/break; public void GetSenMail(List e)/獲取文本獲取發(fā)件模塊送的數(shù)據(jù)if (e.Count0)foreach (MailInfo a in e) int i = treeView1.NodesName.NodesSend.Nodes.Count; treeView1.NodesName.NodesSend.Nodes.Add(i.ToString(),a.geter); SndMail.Add(a);/添加對象到結尾處 private void button1_Click(object sender, EventArgs e) /跳到發(fā)

36、件界面 Form1 Se = new Form1(this, UsName, Pawd, InEmai); this.Hide(); Se.Show(); private void Form2_FormClosed(object sender, FormClosedEventArgs e) /程序退出處理 Application.Exit();/停止程序 private void button2_Click(object sender, EventArgs e) /還原回收站中的數(shù)據(jù) treeView1.NodesName.NodesHuiShou.Nodes.Remove(treeView1

37、.NodesName.NodesHu iShou.NodesBackId.ToString();/獲取集合foreach (MailInfo a in DMail) if (a.id = BackId) dt.Rows.Add(new Object a.id, a.Ttile, a.sender, a.Datatime, a.Fujian ); /獲取集合dataGridView1.DataSource = dt;/獲取數(shù)據(jù)源 private void Form2_Load(object sender, EventArgs e) public class MailInfo public int

38、 id;public string sender;/寄件人public string geter;/收件人public Boolean Fujian;/是否有附件public string FJname;/附件名稱public string Ttile;public string NeiRong;public string Datatime;public MailInfo()Fujian = false;id = -1;sender =;geter =;FJname =;Ttile =;NeiRong =;Datatime =;/內(nèi)容日期構建 MailInfo四、運行結果運行結果有3個界面圖2

39、登錄界面圖3發(fā)送郵件界面基于POPM與與MTPt辦設的捫件轉程序的開發(fā)收件人zonghua70126. com 主題你好送信人 Eonghu招wom璃定返回收件L com Anti spsii GT for Cor email SysiLLKllIGH LOGIN PLUF tUJGIN PLAIN所ail 1Uxr2xKJ7kG0xkIITxGrUTIO sBFY rrrLSTMINIE 唱開始 Lcm5hbtfll&圖4接收郵件界面五、遇到的問題及解決這部分我主要遇到了如下兩個問題,其內(nèi)容與解決方法如下所列: 不清楚SMT林口 POP洞區(qū)另I。其實一般每個提供電子郵件服務的網(wǎng)站都有自己的SMT林口 POP服務器地址,在你登錄你的電子郵件網(wǎng)站時

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論