SMTP服务器编写实验报告_第1页
SMTP服务器编写实验报告_第2页
SMTP服务器编写实验报告_第3页
SMTP服务器编写实验报告_第4页
SMTP服务器编写实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SMTP服务器编写实验报告一.实验目的(1)编写一个SMTP电子邮件服务器,观察电子邮件应用程序与SMTP邮件服务器 的命令交互过程简化的SMTP服务器(a)(b)(c)(d)响应客户SMTP命令,将命令的交互过程和收到的邮件显示到屏幕上 可以仅支持单用户可以不保存和转发收到的邮件可以不作错误处理(3) 要求能显示客户端发送的图片(4) 提交实验报告和源码(要求提交整个工程文件)二.实验思路1) 创建基于对话框类的程序SMT PMailServer2) 添加对话框类SMTPServerDIg,在类中获取主机地址作为服务器地址,创建套 接字,绑定端口号为253) 编写base64.h的头文件,用

2、于图片解码4) 添加基于 CAsyncSocke的类 ServerSocket,重载 OnAccept函数,与 ClientSocket 建立连接5) 添加基于CAsyncSocke 1的类ClientrSocket,重载On Receive函数,根据命令进 行邮件传送和退出三.实验过程常用的SMTP命令命令镐述HELO <主机城名A幵始会话MAIL FROM; V发送者电子邮件地址>开始一个日递处理,指出邮舛发送旨RCPT TO: <姿收者电子邮件地址>fS出邮件按枚者DATA接收g序将DATA命令后面的数躬作为邮件内容处理,直到<CR><LF>

3、;,<CR> <LF>y现RSET口止岂笛的邮件处理NOO P无操作QUIT结束会话常用的SMTP响应描述220域服务准备妊221系统状态或系统帮北应答250请求的命令成功完成354可以发送邮件内容SOU语怯错误,命令不館识别502命令未实現550邮箱不可用1.获取SMTP服务器地址m_IPeSHTP ai 1 Server DI g;: CEJflTPMei 1 Sei"/erOU (CWnd* pParen: A=MJLL*/) :CE i alogx Csv. TPJl ai i S er ver D1 g: ILD, pParent)dip cmip.

4、hicon 二 AfxGe-tApp()->Loa<iIconClER_JlAIMFRAHE), char HostNaire 20;gthoslnane (HoEtName, sizeof (HostNaine)./获取主机的IPhostenl* Sn,hn 二 gethstbyrameCHostName),CStrins atrlPAddr;str TP Addr= i ne t _nt o a (* C £t rue t irvaG'dr hn->h_acldr_l i st 01 k m_IP=ElrI?Addr,2. 在对话框类中创建Socket阳

5、刨建朋务器套接卒,建矢败绪岀错误信息irCLwsack. Crdste茨,SOCK_STRn<|FD_服血 |肛 JOEWDlAOCEPT |FD_OMHECT |FD_C1jOS?. <i_rPJD lleS£afeEoE(_T C*'Sotket 刨建头:败"),c?ltC0If (LnyEock. LlEtciiC)Ltvt nlrrorCoOe = nysDck. Gel Last Error (); f (nixrnif ode ' =WSAEWCi1H.DBLOCK)Rv聞vMH-T"曲斤先败); 町5口比 Closed ;

6、esif'D);"无错误丿話.静出服宇器IF确启动信愿kfE&etJlairffndO->SeiClElteirTe' 口山丄诜:("莎 TP.娈辔 1§;肯鈴好 rjf).按送 3 志L-cturr. TKUE;"關非斓除点谟置刮桂也 査则砥B TRUE3. 建立连接void ServerEoeket : lOnA-icepl (int iriErrorCode)CString prelogjAfxGetMainWndC) ->GetDIsIteiQTeKt (irC_L0G, prelog) log十=prelog

7、;Client Socket WervSocknew Client Socket;/ZTCF谆接CStriag sir C220 server, coo*'), char *岂二"220 server. coinr W: int IsCoimect二Accept OMJewEock) f if (IsCamect 1=0)WewSock->Send(Si 20);"调用接受函数进行操作NeKrEock-MsyncSel ect (FD_READ), los+="TCPa 接成功 rn"巴1 sulog+=-TCPS 接失败 W;prelog

8、. Format (l/S :粘g'rAn/; str);lcig4二prelog:AfxGetMainflndC) ->£etDIgI t einText (IICJJDGlt)Q * /写服务器工作日志 CAsyncSocket:0nAccept CnErr口rCode);4. 邮件传送在Clie ntSocket的On Receive函数中进行邮件传送CStr扌ng prelcig, log,const int sizrSOOiO',char datasize= 0;int 1 ength=Eeceivetdala, size, 0);/7接收到的信息保存

9、至ijdataAfzGct.HaliiWiiJC)->GctDlsI t-uTcztdEC.LOG, prclog) 取二写的工作志1时二PTelcs,"更新丄作日,注CStrine iirCSIlIiib sCupyDataCdata).if CSOCKl_bf<XUR 1= iengtnjrcved = sCopyData;5. 根据客户机的状态status和接收到的信息rcved给出相应的应答:1)收到 HELO, Status置为 1if (statU3=O)(rcved. Left 二HELCQ) /刚建立连接,收至旷HELO"prelog. Ferm

10、at (L"C;墓日:revei ;log=log+prelog;char +='*250 Hello client. coirT;Send(3, 50) IAsyncSelect (FTi_READ);str. Funuat(L'*25C IIcllu lullcnt. uuitO , prelog. Format(L"S :$mrn"j str);los=log+prelog;status = 1;状态.己经收到过HELD信息Af:GetMainWnd(>->SetDlgIteirText(IDC_LjOGJog); /W工作日志

11、return,2)收到 MAIL FROM, statusS为 2 if(Eta-tLi3=l)(rcve±Left(4)="'HAlL'') t"收到5ML FROM"prelog.卩 rmat(L"C:%s'; rcved);108=1og+prelog;str. Format CL*25O sender ok"); char *£二"£50 sender ok"EendCsj 50);AsyneSelect CFD_KEAD): prelog. Format

12、 (L"S :粘s'r'n", str), log 二 log*prelog;status = 2;状态*已经收到过HAIL FIOTAfxGetMainWndO >SetDlgItemText (IDC_LOG, 1 og);发送日志return,/收到"RCPT TO"3)收到 RCPT TO, status为 3 if(tSus=2)(rcvecLLt(7)="RCPT TO") prelog. Format (L"C:%s'; rcved); log=log+E>relog; st

13、r. Format(L2EO Recipient ok"); char +日二"250 Recipient ok" Send(Si 50), AsyncSelect CFD_READ); pre log. Format (L"S 珂str) *los=log+prelog;status = 3,"状态:已经收到过'瓮PT T Af xGetMainWndC) )-SetDlgIt emTest ClDC_LOG, log) ; /发iS 日志 return,4)收到 DATA, statusS为 4收到,开始接受数据if (3tatus

14、3)M(rcved. Left C4)"DATA") prelog, Forroat(L'C:Us'*, roved), log=log+prelog;str. Format(L''354 Send mail, end withon a line");char +sm"354 Send mail,亡nd with " on a line* Send(sj 50),AsyncSelect(FD_KEAD); prelog. Format (LS:Hsrn*j str); log=log+prelog;status

15、= 4; "状态i接收数据 AfxGetilainSndO ->SetDlgItemText (IDC_L0Gj log) ; 发送日志 return;5)收到DATA命令后,status保持为4,接收数据CString msSj prerrisg,Afx(retMaind() ->GetDlsItemText (IDC-MSGprewsg)取已收到软据Afy&etMainWndO ->GetrigItemText ClDC_LOG, prelog) ;已写工祜日志insg+=premsa,premss. FOTHJat (L"C :粘屛 rcvi

16、ed);"收到新数扌居m呂計=preins&,fZg新数据Afjt&etMainWndO ->SetrigIterQText ClDC_MEG, rnsg),当数据接收完全后(以“.”为结束标志)a)更新工作日志和邮件数据,status置为5if(rcved. Find(L"'rm Vn'O l=-l)"收到数据结束信息"* "str.format(L250 Message accepted for celivery);char *e='*250 Message accepted for deliv

17、ery*;Send Csj 50),prelog. FOYinat (L"S:館rr/: str); logloprelog;AfiexKainWnd()->SerDLsIteipText(IDC_LOt, log); zZ重写工作B志 status = 5;"状态退出AfxGetMainWnd() ->GetELglt emText (IDC_KSC, msg);/7重写邮件数据b)附件中是否有图片,若有图片,完成解码并显示i-ilt SELst = H1E5. 3 Lncll(_TC'"U=int?nt-JLsp=iSLtLnn: att

18、achirent'') );/查找邮件是否有bcnp雪片If tsKL 3tl=-l)"寻找两个rn轴位B来确定编码的位直CSrri n? ime-nsE;Lilt Lin5_pD5=iD5. ?LndCTC"rnrii"), eii ct);Cjtrin吕 5t art=ijD5, Il i(im5_pD创 4ime,GutLcjigthO ljie_p3s=4);Lut 1出培Lb-mldrl.卩iJ(_T(气叭img二ut srt. |_Bft (Length);得了固片的Xee MS玛Dc?oic(L:ng, picture);"

19、解码G511T7H丑 1.左EV町帕p 半CurrentApd= ('7EHT?!ailJerzsrAp:) *Mf黑41App();CFZirr円iHi 】S»rvp''PI e Currpntni E二(£町刑=ti I 春叩盯一| mCiirr»ntApp->Tit_plffli nWni;Curr ent DI e->5irp, SetBit:ncip (picture)/fSf i 到对话卞匡 fl 应位直6. 当接收命令的顺序错误,或有错误命令时,进行错误处理 pre 1 OS' Format (L/C:那合

20、:rcved),lo6=los+prelog,str. Format CL"*500 bad sequence of commands OR bad syntax"); charbad sequence of coirmarLds OR bad syntax"Send(3, 50);pre log. Format (L"百;粘s'r'n: str), log=la+prelos,AfjGetMainWndC)->SetDlsIi:eniText (IDC_LOG, log);发送日志 7.关闭连接收到QUIT命令,status置为6

21、,关闭Socket,退出if(CEtatusi=4)(rcved.Left二迫山厂)"收到QUIT(不属于邮件内容) prel os,Forntat (L"C ;掘s: rcved) log=log+prelog;str. Foririat CL"*221 Qui 匕 bye!");char +s二"221 Quit: bye!"SendCsj 50);prelog. Format (L'"E :>srn str);log=los+prelog,status二6;/状态:退出AfxGetMainWnd()->SetDIgItemText (IDC_LCXj, log) ; 发送日志Close C);/ftlSocketreturn,占 SMIP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论