




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于POP3與SMTP協(xié)議的郵件收發(fā)程序的開發(fā)一、設計思想電子郵件指用電子手段傳送信件、單據(jù)、資料等信息的通信方法。電子郵件綜合了電話通信和郵政信件的特點,它傳送信息的速度和電話一樣快,又能象信件一樣使收信者在接收端收到文字記錄。電子郵件系統(tǒng)又稱基于計算機的郵件報文系統(tǒng)。它承擔從郵件進入系統(tǒng)到郵件到達目的地為止的全部處理過程。電子郵件不僅可利用電話網(wǎng)絡,而且可利用任何通信網(wǎng)傳送。在利用電話網(wǎng)絡時,還可利用其非高峰期間傳送信息,這對于商業(yè)郵件具有特殊價值。由中央計算機和小型計算機控制的面向有限用戶的電子系統(tǒng)可以看作是一種計算機會議系統(tǒng)。電子郵件的工作過程遵循客戶-服務器模式。每份電子郵件的發(fā)送都
2、要涉及到發(fā)送方與接收方,發(fā)送方式構(gòu)成客戶端,而接收方構(gòu)成服務器,服務器含有眾多用戶的電子信箱。發(fā)送方通過郵件客戶程序,將編輯好的電子郵件向郵局服務器(SMTP服務器)發(fā)送。郵局服務器識別接收者的地址,并向管理該地址的郵件服務器(POP3服務器)發(fā)送消息。 一個郵件系統(tǒng)的傳輸包含用戶代理User Agent傳輸代理TransferAgent及接受代理DeliveryAgent三大部分。 用戶代理是一個用戶發(fā)信和收信的程序,負責將電子郵件按照一定的標準包裝,然后送至郵件服務器,或由郵件服務器收回。傳輸代理負責信件的交換和傳輸。將信件傳送至適當?shù)泥]件主機,再由接受代理將信件分發(fā)至
3、不同的郵件信箱。傳輸代理必須要能夠接受用戶郵件程序送來的信件,解讀收信人的地址,根據(jù)SMTP協(xié)議將它正確無誤地傳遞到目的地?,F(xiàn)在一般的傳輸代理已采用Sendmail程序完成工作。電子郵件到達郵件主機后,在經(jīng)接收代理POP協(xié)議被用戶讀取至自己的主機。 電子郵件在發(fā)送與接收過程中都要遵循SMTP、POP3等協(xié)議,這些協(xié)議確保了電子郵件在各種不同系統(tǒng)之間的傳輸。其中,SMTP負責電子郵件的發(fā)送,而POP3則用于接收Internet上的電子郵件。 SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源
4、地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCPIP協(xié)議族,它幫助每臺計算機在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。通過SMTP協(xié)議所指定的服務器,我們就可以把Email寄到收信人的服務器上了,整個過程只要幾分鐘。SMTP服務器則是遵循SMTP協(xié)議的發(fā)送郵件服務器,用來發(fā)送或中轉(zhuǎn)你發(fā)出的電子郵件。POP3(Post Office Protocol 3)即郵局協(xié)議,目前已發(fā)展到第三版,稱POP3。它規(guī)定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標準,POP3允許用戶從服務器
5、上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循POP3協(xié)議的接收郵件服務器,用來接收電子郵件的??偟膩碚fPOP3協(xié)議是讓用戶把服務器上的信收到本地來所需要的一種協(xié)議。 本程序為一個基于SMTP和POP3協(xié)議的小型EMAIL收發(fā)程序,簡單的實現(xiàn)了郵件的收發(fā)功能。二、算法流程圖USERE-mail用戶操作SMTP協(xié)議POP3協(xié)議郵件服務器用戶登錄用戶信息郵件信息選擇郵件發(fā)送郵件接收郵件圖1 算法流程圖三、源代碼下面給出的是用登錄程序的源代碼:using System; /導入名字空間using System.Collections.
6、Generic; /包含定義各種對象集合的接口和類using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text; /包含表示 ASCII等字符編碼的類using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.IO;namespace MailSendOfRecive /命名空間public partial class Form3 : Form /定
7、義類public string Conn,Uname,Pwd,Inf; /定義用戶名、密碼public TcpClient Server; /定義服務器public NetworkStream NetStrm;public StreamReader RdStrm;public Boolean BPass; /定義BPasspublic string Data;public byte szData;public string CRLF = "rn" /定義快捷鍵public Form2 Sender;public Form3() /定義框架InitializeComponen
8、t(); /初始化private void Login_Click(object sender, EventArgs e)Conn = "pop."+textBox1.Text.Trim();Uname = textBox2.Text.Trim(); /用戶名Pwd = textBox3.Text; /密碼Server = new TcpClient(Conn, 110); /服務器tryNetStrm = Server.GetStream();RdStrm = new StreamReader(Server.GetStream(), System.Text.Encodin
9、g.Default);RdStrm.ReadLine();Data = "USER "+ Uname + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data);/獲取ASCII值NetStrm.Write(szData,0,szData.Length);RdStrm.ReadLine(); /讀取字符并返回Data = "PASS "+ Pwd + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data);NetStrm.Write(szDat
10、a,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) /判斷索引MessageBox.Show("密碼或者用戶名錯誤", "用戶驗證"); /文本框顯示信息Data = &q
11、uot;QUIT"szData = System.Text.Encoding.ASCII.GetBytes(Data);NetStrm.Write(szData, 0, szData.Length); /寫入數(shù)據(jù)catch (System.Exception ex)MessageBox.Show(ex.Message); /文本框顯示信息private void Form3_Load(object sender, EventArgs e)/定義Form3_Load下面是發(fā)送郵件程序源代碼using System; /導入名字空間using System.Collections.Gen
12、eric; /包含定義各種對象集合的接口和類using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text; /包含表示 ASCII等字符編碼的類using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.IO;using System.Collections;using System.Data.OleDb;namespace MailSendOfRe
13、cive /命名空間public partial class Form1 : Form /定義類TcpClient smtpSrv;NetworkStream netStm; /提供數(shù)據(jù)流string CRLF = "rn"public List<MailInfo> SMail = new List<MailInfo>();public Form2 fa;public string Ua, Pw, Sv;public Form1(Form2 f,string UN,string Pd,string SR) /創(chuàng)建Form1fa = f;Ua = UN
14、;Pw = Pd;Sv = SR;InitializeComponent(); /初始化public void WriteStream(string strCmd)strCmd += CRLF; /crlf表示結(jié)束byte bw = System.Text.Encoding.Default.GetBytes(strCmd); /將字符串轉(zhuǎn)為字節(jié)數(shù)組netStm.Write(bw,0,bw.Length); /寫入網(wǎng)絡private string AuthStream(string strCmd) /連接服務器輸出字符串trybyte by = System.Text.Encoding.Defa
15、ult.GetBytes(strCmd);strCmd = Convert.ToBase64String(by); /轉(zhuǎn)換成base64編碼catch (System.Exception ex)return ex.ToString();return strCmd;public bool tryTran( ref string a) /定義布爾變量string b = ""b = a;trybyte outputb = Convert.FromBase64String(a); /轉(zhuǎn)換數(shù)據(jù)類型a = Encoding.Default.GetString(outputb);ret
16、urn true;catch (System.Exception ex) /顯示錯誤a= b;return false;public void WritInf(string s) /定義WritInftryTran(ref s);listBoxMsg.Items.Add(s);private void ButtonSend_Click(object sender, EventArgs e) /定義ButtonSend_ClicklistBoxMsg.Items.Clear(); /存放smtp服務器返回的信息trystring data;progressBar1.Visible = true;
17、progressBar1.Value = 1;smtpSrv = new TcpClient("smtp."+Sv,25);/TextBoxSer.Text,25); /連接smtp服務器netStm = smtpSrv.GetStream(); /取得Networkstream對象,來發(fā)送接收數(shù)據(jù)StreamReader rdStrm = new StreamReader(smtpSrv.GetStream(); /產(chǎn)生StreamReader來讀取數(shù)據(jù)流WriteStream("EHLO Local"); /發(fā)送命令建立連接progressBar1.
18、Value+;listBoxMsg.Items.Add("輸入用戶名開始");WriteStream("AUTH LOGIN"); /發(fā)送命令請求驗證listBoxMsg.Items.Add(rdStrm.ReadLine();progressBar1.Value+;data = AuthStream(Ua);/data); /轉(zhuǎn)換編碼格式WriteStream(data); /發(fā)送用戶名listBoxMsg.Items.Add(rdStrm.ReadLine();data = AuthStream(Pw);/data); /轉(zhuǎn)換編碼格式WriteStr
19、eam(data); /發(fā)送listBoxMsg.Items.Add(rdStrm.ReadLine(); progressBar1.Value+;data = "MAIL FROM:<" + TextBoxSend.Text + ">" /發(fā)件人地址WriteStream(data);listBoxMsg.Items.Add(rdStrm.ReadLine();progressBar1.Value+;data = "RCPT TO:<"+TextBoxRev.Text+">" /收件人地址
20、WriteStream(data);listBoxMsg.Items.Add(rdStrm.ReadLine();progressBar1.Value+;WriteStream("DATA"); /數(shù)據(jù)listBoxMsg.Items.Add(rdStrm.ReadLine();progressBar1.Value+;data = "Date:"+System.DateTime.Now; /日期WriteStream(data);progressBar1.Value+;data = "From:" + TextBoxSend.Text
21、; /發(fā)送者WriteStream(data);progressBar1.Value+;data = "To:" + TextBoxRev.Text; /接收者WriteStream(data);progressBar1.Value+;data = "SUBJECT:" + textBoxSubject.Text; /主題WriteStream(data);progressBar1.Value+;data = "Reply-To:" + TextBoxSend.Text; /發(fā)送回復地址WriteStream(data);progre
22、ssBar1.Value+;WriteStream(""); /表示首部結(jié)束,開始正文progressBar1.Value+;WriteStream(textBoxMailText.Text);progressBar1.Value+;WriteStream("."); /點表示郵件內(nèi)容結(jié)束progressBar1.Value+;listBoxMsg.Items.Add(rdStrm.ReadLine();WriteStream("QUIT"); /斷開progressBar1.Value+;listBoxMsg.Items.Add(r
23、dStrm.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();/將發(fā)送的消息送到SMail便于傳個收件箱界面SMail.Add(i);MessageBox.Show("郵件
24、發(fā)送成功", "成功"); /顯示信息catch (System.Exception ex)MessageBox.Show(ex.ToString(), "操作錯誤"); /顯示信息private void Form1_FormClosed(object sender, FormClosedEventArgs e)Application.Exit(); /終止所有程序private void button1_Click(object sender, EventArgs e)this.Hide(); /隱藏控件fa.Show();fa.GetSe
25、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; /包含表示
26、 ASCII等字符編碼的類using 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;publ
27、ic byte szData,other;public List<MailInfo> EMail = new List<MailInfo>(); /鏈表類public List<MailInfo> DMail = new List<MailInfo>();public List<MailInfo> SndMail = new List<MailInfo>();public string CRLF = "rn"public FileStream fs;public int InfoID,BackId;pu
28、blic int DeleTxt = -1; /聲明寫入流DataTable dt = new DataTable(); /數(shù)據(jù)表了,類似于數(shù)據(jù)庫,可以存放數(shù)據(jù)public Form2(string Uname,string Pwd,string IEM)InfoID = -1;InEmai = IEM;/"pop."+IEM;UsName = Uname;Pawd = Pwd;InitializeComponent(); /初始化Inint(); /為網(wǎng)格添加標題dt.Columns.Add("ID", typeof(int);dt.Columns.A
29、dd("主題", typeof(string);dt.Columns.Add("發(fā)件人", typeof(string); /創(chuàng)建對象dt.Columns.Add("時間", typeof(string);dt.Columns.Add("含有附件", typeof(Boolean); private void Inint() /初始化節(jié)點 TreeNode Node = treeView1.Nodes.Add("Name", "郵件歸檔系統(tǒng)");Node.Nodes.Add(
30、"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 = n
31、ew TcpClient("pop."+InEmai, 110); /初始化服務器tryNetStrm = 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.G
32、etBytes(Data); /獲取編碼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();
33、 /獲取所有的郵件的大小Data = "STAT " + CRLF;szData = System.Text.Encoding.Default.GetBytes(Data); /獲取編碼NetStrm.Write(szData,0,szData.Length); /寫入數(shù)據(jù)string st = RdStrm.ReadLine();MessageBox.Show(st); /顯示消息框listBoxStatus.Items.Add(st);st = st.Substring(4, 2); /檢索字符串MessageBox.Show(st);int Cout = Int32.
34、Parse(st);if (Cout>0)buttonDel.Enabled = true; /設置控件屬性for (int i = 0; i < Cout;i+ )MailInfo ou = new MailInfo();GetInfo(i+1,ref ou);EMail.Add(ou); /對象添加到結(jié)尾ShowInfo();else buttonDel.Enabled = false; /控件設為不可用buttonCon.Enabled = false; /控件設為不可用buttonDison.Enabled = true;GuiButton.Enabled = true;b
35、uttonDel.Enabled = true; /控件設為不可用treeView1.Enabled = true;catch (System.Exception ex)MessageBox.Show(ex.ToString(); /顯示消息框/按ID讀取郵件并進行解析private void GetInfo(int ID,ref MailInfo NewInfo)richTexOfInfo.AppendText("rn-rn");/追加文本NewInfo.id = ID;string szTemp;trystring st = Convert.ToString(ID);D
36、ata = "UIDL " + st + CRLF; /獲取每個郵件的唯一標示szData = System.Text.Encoding.Default.GetBytes(Data);NetStrm.Write(szData, 0, szData.Length); /寫入數(shù)據(jù)szTemp = RdStrm.ReadLine();richTexOfInfo.AppendText(szTemp + CRLF); /追加文本Data = "RETR " + st + CRLF;szData = System.Text.Encoding.Default.GetB
37、ytes(Data); /獲取編碼NetStrm.Write(szData, 0, szData.Length);szTemp = RdStrm.ReadLine(); /讀取字符串并返回richTexOfInfo.AppendText(szTemp + CRLF);szTemp = RdStrm.ReadLine();elsecatch (System.Exception ex)listBoxStatus.Items.Add("Error:" + ex.ToString();private void buttonDison_Click(object sender, Eve
38、ntArgs e) /退出連接Data = "QUIT "+CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data); /獲取編碼NetStrm.Write(szData, 0, szData.Length);NetStrm.Close(); /釋放資源RdStrm.Close();buttonDel.Enabled = false; /設置控件屬性buttonCon.Enabled = true;buttonDison.Enabled = false;public bool tryTran(ref string a)
39、/安照Base64進行解析流文件trybyte outputb = Convert.FromBase64String(a);a = Encoding.Default.GetString(outputb);return true;catch (System.Exception ex) /錯誤信息return false; private void GetString(ref string a,int s,int e) /字符串處理string u1 = "", u2 ="",u3="" /初始化int sum;sum = a.Index
40、Of("B?"); u1 = a.Substring(0, s);u2 = a.Substring(sum+2, e-sum-2);byte outputb = Convert.FromBase64String(u2);u2 = Encoding.Default.GetString(outputb);u3 = a.Substring(e + 2, a.Length - e - 2);a = u1 + u2 + u3;private void buttonRead_Click(object sender, EventArgs e) /定義事件private void butt
41、onDel_Click(object sender, EventArgs e) /刪除郵件tryif (InfoID>-1)string st = InfoID.ToString();dt.Rows.Remove(dt.RowsDeleTxt);dataGridView1.DataSource = dt;richTexOfInfo.Text = ""MessageBox.Show("刪除操作成功", "操作成功"); /顯示信息catch (System.Exception ex) /顯示錯誤MessageBox.Show(ex
42、.Message); /顯示信息private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) /選擇點擊樹節(jié)點時觸發(fā)的事件dt.Clear();richTexOfInfo.Text = SndMailConvert.ToInt32(e.Node.Name).NeiRong;if (dt.Rows.Count>0)this.dataGridView1.DataSource = dt; /獲取數(shù)據(jù)源else private void GuiButton_Click(object sender, EventArgs
43、 e) /進行歸檔treeView1.Nodes"Name".Nodes"GuiDang".Nodes.Add("ShiYang", "實驗報告"); /獲取樹節(jié)點集合treeView1.Nodes"Name".Nodes"GuiDang".Nodes.Add("Other","其他郵件");foreach (MailInfo a in EMail)if (a.Ttile.IndexOf("實驗報告")> 0)
44、treeView1.Nodes"Name".Nodes"GuiDang".Nodes"ShiYang".Nodes.Add(a.sender, a.sender); /獲取樹節(jié)點集合else treeView1.Nodes"Name".Nodes"GuiDang".Nodes"Other".Nodes.Add(a.sender, a.sender);GuiButton.Enabled = false; /控件設為不可用private void dataGridView1_Ro
45、wHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) /點擊表格時觸發(fā)的事件DeleTxt = e.RowIndex; /獲取索引InfoID = (int)this.dataGridView10, e.RowIndex.Value; /獲取值foreach (MailInfo a in EMail)if (a.id = InfoID)richTexOfInfo.Text = a.NeiRong; /獲取文本break;public void GetSenMail(List<MailInfo> e) /
46、獲取發(fā)件模塊送的數(shù)據(jù)if (e.Count>0)foreach (MailInfo a in e)int i = treeView1.Nodes"Name".Nodes"Send".Nodes.Count;treeView1.Nodes"Name".Nodes"Send".Nodes.Add(i.ToString(),a.geter);SndMail.Add(a); /添加對象到結(jié)尾處private void button1_Click(object sender, EventArgs e) /跳到發(fā)件界面F
47、orm1 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.Nodes"Name".Nodes"HuiShou".Nodes.Re
48、move(treeView1.Nodes"Name".Nodes"HuiShou".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 id;public string sender; /寄件人public string geter; /收件人public Boolean Fujian; /是否有附件public string FJname; /附件名稱public string Ttile; public string NeiRong; /內(nèi)容public string Datatime; /日期pu
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025福州軟件職業(yè)技術學院輔導員考試試題及答案
- 堆垛機結(jié)構(gòu)設計
- 浙江寧波慈溪文旅集團有限公司招聘筆試題庫2025
- 老人摔倒急救指南
- 糖尿病系統(tǒng)解析與防治策略
- 工程管理碩士研究生入學考試題及答案2025年
- 2025年職業(yè)病防治考試試卷及答案
- 2025年智能交通系統(tǒng)工程考試題及答案
- 2025年信息系統(tǒng)管理與技術師資格考試模擬題及答案
- 2025年網(wǎng)絡安全工程師考試試卷及答案
- 浙教版八年級科學第四章電學測試
- 機電顧問服務建議書123
- 廣西壯族自治區(qū)工程造價綜合定額答疑匯編2022年11月更新
- 科學發(fā)展觀基本解讀(完整版)課件
- 基坑工程施工驗收記錄表
- 夜間施工專項方案
- 微生物實驗室病原微生物評估報告
- 護理風險管理與護理安全
- 綜采工作面液壓支架壓死救活技術研究
- 行政單位會計實習報告(共36頁)
- 主體結(jié)構(gòu)監(jiān)理實施細則范本
評論
0/150
提交評論