电子邮件客户端软件(带源程序)
电子件邮户客软端件(带程源序
需源)码代。序等程套全设联系 69计512052 3 录目 11 1. .1 12. 3 2.212. 2 .242. 5 3.31 .32 引言 11
电子邮件介绍开 背发 2
开景发环及运境环行 2境软件 架及构系统例图用3 统架系构 3系统 总体用 例发邮件类送 加小功附能 S类MP T议的研协 究 4 44 5 63
S
MTP 协议简介工作及理 原MSTP 议协命的和应令答
.321.STP M协的命议令6 4 4.1 42. 5FCR28 214 FC8R22简单介 绍1 4信件的部头1
4
命名件 Ma控lSeid 20
n
5.1
52 5.2.. 1.2.35 6.617 71 .72 .
8
送邮发类 SmtpMa件i 20lAd Exdtra类 27 用调Wi dnwosA I 所需P命名的间空28 在序程中体的使用 2具
8软件运
时的行界面2 新9建邮件帐 系号测试统 3 29
2同一
S TPM服务 器发邮件送测试 3的 2用不同的 S利TM 服务P发器送件的测试 邮32结 论34 3
5参考文献
致 3谢
6外
文献文原 文译文1 1 .1 言 电子邮引介绍 件电邮件简子称E-mai 又称电子1信、箱电 邮政子它,?是种用电子段手供提信息交换的通 方信式 它是全。球种多网上络使最普用遍的项一务。服这非交种 互的通式信,加速信了的交流息及据数传,送它?是个简、易快速方法的。过连接通全世界的 Int enret,现各实类信的号送传接、、收贮存等处,理将邮件到世送界的各个 角落到。前目为,可以说电止子邮件是Internet 资 源使用最的多一种服务 ,E-ami1 只局不限信件于的递,传可用还来递传文件声音、及形图、像等图不
同类的信息。型电 子邮不是件种一“终端到终端” 的务,服被称是为 “贮存发式转”服务。 这正是 子电箱信系统核心的,利用贮转存可进发行实时非信,通异步属通方信。式 即信发送件者随可时随发送地邮,件不求接要收同时者场在,即使对方现在不,在 仍可将邮件刻立到对送的方信内,且存箱在对储方的电邮子中。接箱者可在收他认 方为的便时候读取信件不受时空,限。制这里在“发送”邮,意味件将邮着放 到件件人的收箱信中而, “收接”邮则件味意从自着的己信箱读中取信件,信箱实 际上是文件管理系由支统持?个的体。因为实电子邮件是通邮过件务服 器ai1 mersver来传递档的 通常 m。ai servel r是执多任行务作系操 统UIXN的计 机算,它提供 24 小 的时电邮件子务,用服只户要 ma向l seiver r管人理员请申个?信 箱账,号可就用这项快速的使件邮务。 服电子件邮工的作原:理1 电子邮 系统是件种一新型信息的系,统通信是术技和算计机术结合技 的产物 电。子邮的件输是传过通子电件简邮传单输协议S impl eaiMlTr anfse rPotrocl,简o S称MTP这一系统 软件来完的,它是 In成etnert 下一的电种子件通邮信协 。议2 电子邮件 基的原本,理是通信在网设立上电子“信系统”箱它,际上 实一是计个机算统
系。系统的件硬一是高性个、大能容量计算机。的盘作硬信为箱的存 介储,质硬盘在为用户上分定一存的空储作间用为的 户信“”箱每位,户都用有 于属自的?己电个子箱。信确并定个?户名和用户用可以自己意修改随的口。令存 空储间含存包放所信件收、辑编件信以及信件存盘部三空分间,用户使用口令
开启
自的信己箱并,进发行、读信信编辑、、转发存、档等种操作各系统。功 主要由能件软实现。 电3邮件子通信的是在信箱之进间的。 用行户首先启开自己信箱的,然后 过键通入令的方式将需要命送的邮件发发对方的到信中。箱 邮件在信箱间之行 传进递交和换也可以,与?另个邮件系进统行递传和交。换收在取信方,时用使特定账号从 信箱取提 1.2 开发。景 背当前行流的各邮大件客户端软件除的了最要的主发收件之外信功能, 越越复来,杂是人但平们常真用正到的能功少,很多功很尤能其于那些计对机知 识相对算乏的人来说,缺加显更太过于华得丽而太不实用。鉴有此,在了解于RF C 底层议的基础上,我协开发了们个各种功能相对这单简用的实件邮客端程户, 序简化很了多必要的不能功 1.3。 13.. 开1环境发及运环境 开发环境行
AM
DAth lonMT,15M 内存2,8G 硬0盘Mic orsotf? inWdosw X? ProPfssionaelMicr ooft? Visusla Stuido20 0C3 Shrpa Microsft?o evDeoleprNet owrkfor V iuas Slutdi.NEoT2 0301.3 2.运行环 境
nIetl? enPtimu?2 及 上以处理器,32 以上内M存,4 G上以硬盘Mic roofst Wi?dnows 9X?/T 操作N统 系800*060或以 的上屏幕辨率
分确机器保安上有装.eN trFmaeorWk .0 或1以者版本上 22. 1软件架 构系统及例图 用系统架构 软的件体架总如构图2 .:1
2.图12 2.
软件架
图构
统总系用例 体统总体系例用图
图 2
2.3
程序
能框功 程序图功能图
图23 .2.
4发
送件邮 是类发送件邮的核,类名心 S为tmpailM,属隶命于空间 名MiaSenld。封装 了
发
邮件的送体实具方法现也,是体的 具RF 用代码C实的过程现。用户而通过体 具操作接口的,接口 S与mptaMl 类i过通交互作操实现来户用送发信的操件。 2作. 附5小加能类功 是获取些一如诸系统间,时当用户前名以,及机本 P 之I的类,类类名为 AddxEtra隶,于命属名间 空MiaSlend。 3STPM 协议研究 的由于要发的开是件邮户端客序程就,不不得用到 STPM 协议 和PP O协。议 而我个人负责是的件发送功能邮的现,因此就必实然会涉到及 MTP(SiSplem Mial Tansrer Pfotoroc)l议。SM协T 被用来P因特网上发送在邮,该件议协定规了一 些本的命基令和法方使户客端服与务器行进交互以达,发到邮件送的的。目
3.
13.11
.SMTP协 议介及工作原理简 绍介
简
单邮传件协输(议SMPT的目标)是靠可效高传送地件邮,它立于独传 送子系而且仅要统求条
一
可以证传保送数据单顺元序通道的 S。MPT的一 重要个特是点能够在传它送接中力送传件邮传送服,务供了提 进间通信程境环(PIE),C环境可以包括一个此网,几个网络或一个网络的络子网。 理到传解送系统或(I CE)P不一对一是是很重的要。的程可进直能接其和它程 进通过知已的I PC E通。邮信是件一个用程序应进或程间信通邮件。以可通连过接 在不同IP C E上的程跨进网进络行件邮传送 更。特的别是,邮可以通过不同网络 上的主机件接力传式送 3。1.2.SMTP 型
模STPM设计 于以基下通模信型针对用:户邮件请求,发的送 MTP S立建与接收 MST P间之建一个立向双送传道。通 收接S MP 可以T最是终收接者也以可中间 传是送。S者TMP 命令发送由S TP M发,由出收 S接MTP接收, 应而答则方反面送。传 旦一传通送道建立,MTPS 发送发送者 AIM L令指命邮明件送发者。果如 MTSP 收者可接以收接件邮返则 回K O应。S答TPM发 者送发出 再CRT P命确令邮 认是件接否到收。如果 MTPS 接者收收接则返回, OK 应答;果不如能接收到,发出则 绝接收应拒(答但中止不整个件邮操),双作方如此重将复多次当接收。者收全 到邮部件会后接到收别特序的,列果接收如成者功理了处邮件,返则 回O K答应。S TMP 供提送传邮件的机,制如接收果方与送方发接在同一个传连送务服 时下邮件可,以接由直送方主发机传到接收方主送机;或者,当两不者同一在传个 送服下务,通时过中继SM TP 务器传服。 送了为能够 对MTS 服务器P供中继提能,力
它必须
拥有最终目主机地的址和箱邮名。称 MIL A命令参是数回路径复它,定指邮件从处何来;而RCPT 命令的参数是 发路转径,它的定指邮件何向去。向处路前是源路径,而径回路径是返回路复 径它用于(发错误时返生回件邮) 当。同一消息要个往发不同的接者收,S时TPM遇 到向了不同收者发送接同一份 数据的复制品的问,题件命邮和令答有应个一比奇怪的语法较,答应也一有个 字数码代在下。,面子中可以看到例些哪使实际的命用和应令答。整的完令命和应 在答第四。节 命令与应答对小大写不敏,感就也说是命,令应答可以和是大,小写写或两 者的合,混这但点一用对户邮件名称不一定是对却,的为因有主的对机户用 名大写是敏小感。 这的 样SMP T实现中就用户将邮名箱保留称初成时的样子,主机 始名对称大写小敏感。不 命与令应答 ASCII 由母表字成组,当传服务提送 8供 字位节传送道,通每 7 位符正字传确,送而高位被最填充为0。 指定一当般命令的或应格答后式参数, 会由一些似类语于言字的串符示出表来,""或"如rverse-paeht",里这尖括号表示 这一是类种似于言语变量的。 3.2 SMTP 协的命议令应和
答3
2..SMTP1
协议的令命 MST P令定命了义邮件输或由用户传定义系统的能功。的它令命由结束 是字符串的 。而带有参数在情况下的命令本身由和,参数开,分如未带参数可以直 接果连接。邮和的语箱格法必式须和收接点站的格式一。致面讨论下 MTPS命令 和 答。
应发
邮件操送涉作到不同的数及据对,象们由它不同参数相互的连接。回 复 径路就是 MAL 命I令的参,而转数发路则是 R径PC 命令T参的,数邮日件是 DATA期命令的参 数。这些 参或者数据数对必须跟在命令后。象这模种式就也要有不求 同的冲区缓来储存这对些象,也是就,有一说个回路复径冲缓,一区个转发径缓冲路 ,一区个件内邮容缓冲区 。特定的命产生自令的己冲区,或使缓个一多个缓冲或 的容被内除。 H清LEO LEHL O此命令用于向接 收STPM确 发认送 SMT。 参P域数包括发 送STM 的主P机。 名接收 MST P通连过接认命确令向来送发S MPT 认确收 S接TP。M引令和 命K O响确应 认送发和接收 MTSP 入进初始了状,也态是就,说没操作正有执在,所有行状表态和缓 冲已经被区清子除 。AILMM ILA 此命令于开用将邮始发件送到一多个个邮中。箱数域包括参回复路。 返径路径中回包了括选可的主和机送者发箱邮表列。当有主列机时表,它是一回个 复路径源它说,明此邮是由在箱表中的机主一一递发送(第传个主机一最是一 个后接到此收件的邮主)过来的。 机表此有也作向发者送返非回递信号传源路的径 因为每个。递传主地机都被址加在表起此处始它就,须使用发必 IPCE 送而是不接 收ICEP(如果它不们是个 IP一CE 话的)楚清的名。一称些出错信的回复息路径可 能就是的。 此命空清令除复回径路缓区冲,发路径缓冲区转邮件和容缓冲内,区且将并此 命令的回复路径息插入信到复回径路冲区缓中 RECIPI。NT RCPE
此T令命于用确邮件内定容唯一的接者;收多接收者个由多将此命令指个 定。 发路径中包转一括个选的主机和一可必须的目的个箱邮 。出当主机现表时, 列这就一是个源径路,指明它邮件须向必列表中的一个上机发送主如。果收 SM接T P实未邮件的现传发送递,就返回如未知会地用户(本505的信息)用给。 当邮件户传被发送递时传,递主机须必将己的自名由转发路径的开始称 处移回至路复的径束结处。当 件邮终到达目最地的时,接 收SMP 将T它以主的机邮 件格自己式名称的入插目标件邮。中例,如由传递机主A 接收的有如下参数的带邮 时,件 FRM:[email protected] @H:SOTAAR.PA,@HOTBS.RAPA:USEC@HOSTDRARPA .会将成变如下形式 F:RO:M@HOSATARP.:[email protected] TAO@HO:TBS.ARAP:[email protected]. P命此导令致它的转路发参径加入数转发路缓冲径中。区D AATDA TA 接者收跟在命令后将的行为
作
邮件容内。此令导致此命命令的邮后件内 容加邮入件内容冲区。缓邮 件内可容以括所包有128 个A SIIC 字码。邮符件容 由内只括包个一句的行号束结也就,是如的下符序列:字"."它,指示了邮件结的。束 邮件容的内束结示要求接收者指现在处理保就的邮件存内。容此过程将回复 路缓冲区径转发,径路冲缓区和件内邮缓冲区容的容内部全清空如。果操 作功成接,收者须返必回O K 应;答如果败失必也返回失败应须。 答接收当S MP T到一收信条息时,无论用作是发转还此是邮件经已达目的
到地,都它必在须件邮内的容开处始上时间加戳这行一,这行一指示了接到收邮 主件和机发出此邮件机的主识,以标接及收到邮内件容时的和日期间。发转信件的 将多行有样的这时间戳 。当收 S接MPT 作最后站的传送时一它将返,回径路信行 插入息件中邮 此。包行了括发送令中的命re vrseep-ah 的信息t在这。里最,一站后的 传送意思的邮是将件送被到目的户手用中但在,些情一况,下件邮能可要需更 进步一的加工由另并外的邮件统系传送 。可能在返路回径中邮的箱与际实送发的邮不一件,致个这情况能可发 在生要需传送一个特定错的误理处信箱而是不件发送者那里。信上所面说述了,明 后最的邮件容内一个返由回路径,行在和后的一其或多个个间时戳构行。成些这行 面后是邮内件的头和体信容。息 处理后当面邮件的据指数示分成功时部就需要定特的说明这。种情况可 能发在生发送SM P 发T当邮件需要现传送给个多户时,用只能成够功地向中其 的部分一送发信息种情这况下 。在这种情下况,须对必 ATAD命 令发 OK 送答,而接 应收S MPT 组织并发一个"不送可递传件"邮息信到信的息发者。送在此信息中者 发送一或不成功接个者收列的,或表者每次发送个不成一收者,接而发多送。次所有 不可传递邮件信 息 由MILA命 令送。 发返回路和接径收间时例戳 Ret子unr-Ptha @:HIGA.RAP,@DF.ERAP,[email protected]:[email protected] ceeied:vf omr HGIAR.PA y JbLKA.PAR ; 7 O2c 81t 5:271:39 SP TeRecvid:e rom fEFDAR.PAby GH .AIPA R;2 7O t 8c115:15 :13 PS RTeeivced f:omrABC. RPAAb y DFE.RAA P;27 Ot c18 1:05:195P TS ate: D72Oc t811 :50:11 0SP
T
F
omr:JO @ABE.ARPCAS ubjct:e Ipmoved MarilngiS stemyIn tsaled Tlo:SA @MJLKA.PR ThiA si tosi nfro ymuo htt aSNEDSE ND
此令命于开始一用发送个命令,邮将件发到一个或多送个终上。端 数参域 包了一个括复路回,此命令径如成果就将邮功发件到送端终了。 回上路径包括复一个可选的主列机表发送者和邮箱。出现当机列主表时 ,示表这一是传送路径,邮件个就经过这是个径路的每个上主发送到机这的(里列 上第表个主一是机最后手的经主)。机此表用返回于非传递号信发送到
者。因 每个传递为机地主都址加在此表起始被,处就它必使须用发 送PIEC 不而是接 I收PE(如C它果不们一是个I CP E的)话清楚的称名一。出错些息信的复路径回能可就 空的。是此 命令清除回复径路缓冲,区发转路径冲区缓和件邮容缓内冲区并,且将 此令的回复命路径息信入到插复路径缓回冲中区 SE。D NO MARI LOSL M此命令用于开一始个件操邮作将邮件容传内到一送个或个多端上终, 或者传到邮送中。 箱对每个接于者收,如果收接者端终开,邮件内容打将传送到被接收者的 端终,否上则送就到收者的接箱邮。 中数参域包括回复径,如路成果地将功信 送到终端息或邮中箱命此成功令。 回路复径包括一个选可的机列主和表送者邮发。箱出现当主列机表,时表 这示一个是传路径送邮,件是就经过这个径上的每个路主机送到发这里(的 表上第一列个主是最后经手的机主机。此表用)于回非返传信递号到发者。因送为
每个传递主机地址都被加在此表
始起处它,就须使必发用送IPC E 而是接收 IP不CE如果(它们是不个 I一PC 的E话)清的名楚。一称些出信息错的复回径路可能 是空就。的 此命清除令复回路径冲区,缓转发径路缓区和邮件内冲容冲缓区并,将且 此令的命回复径路信息插入到回路径缓复区中。 SEND冲 AND MALI SAML 此令用命于开始一邮个操作将件邮内件容传到一送个或多个终端,并 上传送到箱中邮如果接。收者端终打开邮,内容件被将送传接到者收终的上端和 接者收邮箱中的 参。数包域括复回径路,果成功地将如息送信到邮中箱此命令功。成回复路径 包括个一可选主机的表和发送者邮列。箱出当现主机列时, 表表这是一个示送路径传邮件就,经过是这路径个的上个主机发送每这到的里列( 表上第一个机是主最后经手主机的。此)表用返于回非递传号信到送发。者因 为每个递传机地址主都加被在表此始处起它就,必使须用送发 PCE 而I是接收不I CPE如(它果不们是个一 ICE 的话)清楚的P称名。些一错信息的回复出路径可能 是空的就。 此命令除回复清路缓径冲区转,路径发冲缓区和邮件容缓内冲区,且将 此命令的回复路并径信息入插到复回径缓冲路区。中R SETE RSE 此命令指示当T送件邮操作被将放弃。 任保何存的送者发,接者收邮件和 内应该被抛容,弃有缓所冲区状态表和该应清除被接收,必方须返回OK 应答 。VREFIY RFYV 此令命要接求收者认确参是数一个用。户如果这是 已(知道经)用的户,名
返回用户
的全名指定的和箱。此命邮令回复对路缓径冲区,发路转缓冲区径和邮 内件缓容冲没有影响。区 EPAXDN XPE 此N命要令求收者接确认参数指定了一邮个发件列表,如果送一是个邮 件发列表,送就
返回表的成员。中 如这果是已经知道(的)户名,返用回用户全名和 的指的定箱邮。命此对令复回径路缓区,转发路冲径缓区和冲件内邮缓冲容区没有 影响 。HEPLH EL 此命P令致接收导者 H向ELP命 的发令者发送出助信息。 帮命此令以带可 数,参并返回定特的信作息应答。 为命此对令回复径缓路区冲,发转径路缓区和冲邮件内 容冲缓区没影有。响N OP ONOPO 命令不此响影何参任数已和经出的发令。命它只说明是有没任何作而 不操是明接说收发者了一个 O送K 答应 。此命令回复对径路缓区冲,发转路径冲缓 区邮和件内缓容区没有冲响。 影QUTIQU TI此命令 指接收方示必发须 送O 应K然答后闭传关信送。道接方在收接到 UIT 命令并Q出响应之做不前该关应通闭信道。信送发在方送发 UIQT命 和令收 到接应响前也之不应关闭信道该即使。错,出也应不该闭信关。如道果连被接前提关 闭接收,方应象该接到收 RSTE 命令样一取消所,有待的等操作但不恢,复原 先经做过的操作已。发送而方应象该收接到暂时误错(4XX)样假定一命和操作令仍 支在持中。之
TUR
NTUN R此命指令接收方定么要发送OK 应答并改变角色为送 S发MTP要么,送发拒 信绝息并保持己自的角。如色果序 程A 现在发送 是MSP,T它出发 UTRN命令后接 收 到KO250(应答),就它变成了收接 STP。 程M 序A就 进入始初状态,象好信信通 刚道开一打样这,它时送 发202准备好服务 信。号如果序 程B现 是在收接 MTP,它 S出发TU NR 命令接后收 到O(K50)2答,应就它成了变发送S TMP 程。序 A进就初始入 态状好象通信,信刚打开一道,样时它这备接收 准22 准备好服0务号信 若要。拒绝改变角色接,收可方以发送 520 应答 。于对这命些的令序顺一定有限的。制话的第对个命一令必是须 EHLL O 命令,命令在此后的此话中也会可使以用。如 HE果LL O令命的参不数接可,必受由须 回一个 返01 5失应答,同败时收到的接SM PT 必须保持在刚与一致才状的态。 NOOP,下HLE,EXPP N和 VFR Y命可令以在话的任会时候使用。何MALISE,N,SDMO 或L SMAL 命令开始个一件操邮作一。旦始了以开就后发要 R送PT 和CDAT A 命。邮令件 作可操由 以SRET命令终止。在一 个会话可以有一个中多或个操作 。果在如操开始参作数不可受,必接须返回5 0 1失应败答同,时接到收 的MSPT必须保 在与刚才持一的致状下态如。果操中作命的令序出顺错必须返, 回035失败 答应,时接收同到 的SMPT必 保持在与刚才须一致的状态。 下会话最的一后个命令须必 QU是I 命T令。此命令在会话 其的时间它不能使用 C。MMANDO 语法式 格命是令由命令和其后的参码域数成组。 的令命码是个字母四成组的,区 不大别小。因为写面下的命的令用是相
作同的
M:IA MaLi lailmM al mAII 这l对于引任何导参数值的记标也适用是的如, TO和 ot 就是样的一。命 令 码参和由一数个多或空格分开。 然而在个回复径路和转路径中的发数是区别大 参小写。特的别在一是主些机,"s上imht和""mStih"根本不就一个是户用。 数域参不由长定的符串组成字它,结由束,收接在完全方接收到序此列 不会前采任何行动。取方括代号可表的参选数。如果不选择的话域,系统择选默认 设的。置 面下是 SMT P令: HELO命MA I RLCTP DAA TRSTESE DN OSML SAMLVRF EXPYNHE L [P ]NO O QUIT PTRU N.3.2 2MSPT 的应答码 FOM:Revrersepa-ht ROMF:rveeser-atp hROFMr:verse-eathpTO: orwfard-apth FRM:Oevrresep-ah
t对
SMTP 命令 响的是应样多,它的定确在邮了传输件过程中请和处求的理
同步
也,保了证送 SM发TP知 道接 收STMP 的状态。每个命令须有必只有一且响 个。 应MTSP响应由 三位字组成数其后,跟些文本。数一帮字助决下一个定应 进该的入状态而,本文对人是有意义的 三位。响应的已经包了足够的括息信不,再用 阅文读,文本可以直接抛弃本或传递给者户用。 别特的是,文是本与接和环境相收关的 所,每次接收到以的文可本不能同在附录 E 。可以看中全到的部响码。应正 的情况下规,响应下由序面构成:三列位数的,字,行文一本和一,或个也者可是 以个一行响应。只有 E多XN 和 HEPPL 命可以导令多行致应,然而,答对所命有令多,行响 都应允许的。是 EPRY LCDES BYOFU CTION GNOURS P50 0式错格,命令误不识别可(错此也误包 括令命过行) 长51 参0格式错数误5 20 令不可实现命50 3 错误命令的序 列04 命令参数5不可现实 12 系1统状态或统系助响帮应21 帮助4信 息22 201 2241命令的 响应) 25 要求的邮件操0作完成 务就绪 服服务关传闭信输道 服未务绪,就闭关输传信(道当须必闭时关,应此可以作答对任为何
2
5 1用户非本地将转发向, ofwrra-patdh 40 5要的求邮操件未作完,邮成不箱用可(如例邮箱忙, 5)0 5求要邮的操作件未成,完邮箱不可(用例,如邮未箱找,或不到可 访) 4问5 放弃要1的操作求;处理程过出中 5错15用户非本地,请尝试 frwardopa-th45 2系统存储不足, 要求的作未操执行 52 过5量的存分配,要储求的作操未行 553 邮箱名执可不用要,求的操未执行作(例如箱格邮错误)式 534开 邮始输入,以件.束结 545操 失败作 4 FRC82 2说发送和道接受邮,我件就们须不必得不 提FRC22 8了。RFC228 的称是 全AR“P A特因网本信文件式格标的准”Stnadrda fort ehFo mrt aof ARPA nIerntet Txet eMsagsse。该准提标了邮件供内的格容式和相关语。 4.义1R F8C22简单介 绍 RC82F 规定的电2子邮件容内全部由A SICI字 组成符,是就通常说的所文本 件,因文而标将它准称 I为ternetn文 本件 In信ternt eTxt eMssag
e
es。
直从观上看信,非件常简,就单是一列系由 SCAI 字I符成组的本文行,每一行 以回换行符“C车RLF,“就 是SCAI I码 13 和的1 0结 束。从 织组看上信,件容内构结为两大分分部中,间一个空用白行只 C有LRF符 行来分的隔。一第部称分信为件的部头 tehhe dera f tohem esags,e包有
括
关送方发接收、、发方送日期信息。等第部二称为分信的体件 部Bdy ofo het mseaseg,括包件信内容的文正本文。信头 是需必,信的体可是的,选信体即有可可无。 如果不存在信 体用,分作的空隔行也就白不要需在。信中,也可体以有作分用隔的 空行白这样。计设信的便件进于语法分析行,取提件信的本基信息。在 R F8C2 2中规,信件定就是体一系的列收向信表人信息达文的本,比 行简较,可以单含任包意文本,没并有加附结的。信件构则头具有较复杂比的结构,在下一小 节中详。述4 . 242..1 件的信头 部头的信般格一式
头信结的比较复构杂,信头若干由信头字段hea erd feild组 ,成些这字段为用 户和序程提了供于关信件的息信。 了解要信头结构就的要弄清各种信楚字头 段。所有的信头字段 具有都相同的法结构语,从逻辑说,上括四包部,分字 段 fiel名dname 紧跟,号":冒 c"olo,后跟字段体 nifld ebdo,y后以回最换行车符 RCLF 终止即。信头字 字段段名字:体 段RLFC
字段
名须由必除了号冒空和格以的可外印 打USAS?IC I符字值其 3在 和 132 6间之组,成多数大字的段字名称段一由列系母字数,字成,中间经组常插横入 符线。字名段告电子邮件诉软件如翻译何行中剩下该内的。容字 体段可以包除了括CR 和LF 外之任的 何ASCI I字符。 但是其的空格, 中加号括注释,的引号多和字段行比都复较,另外,杂段字体语法和的义语依赖字于段 名,每类型个字段有特的定格式。的
RFC28 2信件为义了一些定标字准段并,提了供户自行定用非义准标段字 的 方.2.24结构化 字段非和结化构字段
个每字段所包的含信息不同字,大段体以可分为结构化段字非结和构 化段。字结 化字段构有定特格式,由的法语分析序检测。 程Sednr e段就字是一个好 的很例子,的字它段容是信箱内 有一个,散离结的。 非构结构化字段的含任有意数据的没,有固格式。例如定,uSjecbt字 段 以含可任有意的字,并文没有且定格式固非结。化的字段数量构少,较有只 uSjbet、c oCmemnts、扩字展,段标准非段字、INRe?lp 和y efReerces 等。n 有所它字其段都结构是的。化4.2. 3信头 字段的元素
尽
Emai管 信件l总体的构结常非简单但一些,信头段字的构结很是复杂的。 面介下绍一大些多数字共段有元素。的 1)(空白 像其它符本文件文一,样白空包符括格符 AS空II 码C 2 和制表3 符TaAbSICI码 1 9此外,。行的
末回车换行符C RFL也应算 是白空。使符用空符可白以字段对进 行式化格,加它增的读可。性 例如每个,段间字 C用LFR 来分离,字段在用内格 来分隔空字名和字段内容。段在 Sbjuce t后的冒面号内和之间容入插空格符字, 会字段使构结更清加。 晰在 maiE 中l,白符空的使用没并固定有规的则但,当应正 确地用使仅,需要在才使用空时白,以符便接收软件进行法分语。 (2析注)解
注解
由括是括起号的一来系列符字,例,这如份物礼。解一注用在非般结 化构的头信字中段没有,语语法,义仅人提供为一些了加附信息。的如果 加在引号的 符串字中有括在括号中包字符,的是字符那串的部一,不是分注解 在解释。信 的时候,件将注解忽略,可以用一个会格空字代符替它们,这就样什也么会不坏。破(3)字 折段叠每个信头 段从字逻上说辑当是一个应字段名、由号冒、段体字和CRLF 成组单一的行,的但为书了与写示显的方便,增可读性加也为了,合符1 0008/0的 行符数的字制限,以可超过将8 个0符的信字字段头为多行分即对于,比较长的字段,可 以分割几行成形成折叠。 ,在结构和非化结构化段中都允字许叠折通。过在字 段某中些插入 点RCL F符至少一个和多个空或白符来字实现字的段叠,折一第 后行的行称为面头信字的续行段。续行都以个一空符开白,始种这法方称为叠 折(fodinl),g如例题字段 Sub标ejct: Tihsi as tets可 以表示:为 uSjbct: ehiTs s i test 反a之,将一个折叠成被多行的头信字恢复到它段的单行示表过程叫做 去折叠的只要简单地移除后面跟着,空的 CRL格F将,折空白符叠 RCLF 换转空格字成符 ,可就以成完折叠去 unfodlni。在分g被折析的叠字段语的法,要把时个一行多的 折字叠段开展一行为,根据的它折叠非形式来的分它的析法语与义。语 ()4字段小写大字 段称名不是分大区写的小,所 以uSjbet、c usbejc 或 tSBUJCT E都一样。不 过字 段名 大称小 写 习惯有 常的 形用 式,如 题 主段的字大小写 形 通式为 Subjec常t。 段体的字小大稍写微杂复点,要视况而定。比如 情uSbjet 后c面的段字 体其中的,写大可能是就缩的写专用词,名能不动。
改
准标的头字信 下段面绍介RFC8 2 2中义的定用的标准常头字段信。 表41. FCR82 2常的标用信准字头 段发信与有方关信头的字 格式段:Frm:omaibox l举:From:例wan@1g36 信人字段。写明信件说的始原建者创,出他给的电
子信箱地。址建者创信件的原对内容负责始 格。式Sen:derm:aiblxo 例:F举om:rwnga@613 Snedrel:i@sni 发a送者段字。 明实际说提交发这送信个的件人给出,他的
子信箱地址。当电信人发写与信不一样时使人用比如。秘书替经理发信。,发送 者对发负送。责 式格R:ply-TO:emilbaxo 举:例Fr
om:wna@1g6 Fr3moz:ha@oshoo回 复字。指定段应当回把发到信 哪里。如果此有字段,回信将会给它发定的邮箱指,而会发不 Fro给 字段指定的m 邮。箱比,发送的是经如理的,但信回应交信办室公理处。与 收方有信的关头信段 字式格:O:Tmilaox blits 例举:O:zhTng@2a63 信人字收段指。主定要收人的信邮地址箱,以是可
个邮箱多址地的表,地列中间址逗用号开。隔 式:格Ccm:ilboa lxsit 举例:cCz:ahn@863 g抄送字。指段此定件信同时要给发些哪人也,称抄为
送
也可以使。用邮箱地址表列,送抄多给人。个 格:式Bccm:albiox lst 密i字段抄。定此指信要件同时秘密给哪发人些
,
也为密件称抄送。也以可用邮箱使址地表列密,抄多个给。人 它的信头字段其格式 :Dat:edatet-me 举例:Diae:tTu,0e Dec 4024 0子件邮建的日期创时间。 和式格S:buejct:*etxt 举例Su:jebctHe:llo! uSjbec:te:Hello! 信R件主题段。描述字信件的主 。题当回复件时,通信常在主题面增前加“Re”:前缀标,记为信该为回复件件: 当信信件转被发,时常在通主题字文前面上“Fw加:,”Fw“d”这样的前:缀。格式 Re:eicved [:"rfo"m dmoin]a ;发主送 1机:68:08 1+080 期日段:字atD e字段含有电
["b
y"d oamni ]接收主机;[" iav "atom ;]物理径路 受字接。段是递投信的件特定邮件服
务["id" msg-d] i接收者; mg sdi
器
作的所录。 处理邮记件投递每的个服器必须务它处理的给每信个头前面加的 个 Receiv一e d字,用段描述以件信到目达地的经所的路过以及相径关息。信当 踪 各个电子邮跟件问时题,个这信很有息助。 帮举:Receiv例e:drfmow nga1[9.05.0.] 1byli[1 29.50..4] Tu eed c02031 2:8:02 1+80 0格式:ommeCnst:t*et 注释字段。用x于一个注解添加把信到中。件
格:R式sent-* 举e例Re:sen-tFomrRes entS-ednr Reesne-date Rtesne-tRply-eo T重发字。段需当把要收到信件重的给发一另组信人的
收时候可以保,整个持原始件信变,不简并单地产重发信件生要求的新信所字段。头为避 免与以的前字段混。新添相加的头信字段加上 都eseRtn-前缀符串,字们它的 法与语加前缀的未名字段相同同 。格:式Mesages-DI:ms-gi d信标件字段。识用表示于个信件唯一标识一该,
字通常有段 Smtp服务 生器成,个值通这常唯一的是形式。根据用使的软而件。定 通左边常是识标符右边指,定电名脑图 27 - 2表 中关键的表字了电明邮子借用件办公室备了忘中录概念 和术的:语子电邮件头的能部够含包一说明应当接行收该备到录忘接收的。象传方 统的办室备忘录一样,电公邮子件使关键用字Cc 指 一个明写副复 本cabronc op. 电y子邮件软件须向必 C:后面c电子邮的地件址表的中每地址发送个份消息一的副 本。 统的办公传过室程求要备忘录的发方送知通收接方本是副传给否
其它 人。 时发送方希有望将忘录的备个副本一别给而不显示人有一个出副本发送出 去。被一些子电件邮系提供这统的选项样,循传遵的统办公室术,语盲复用写本副bli d ncrbao cnpy o来示表。建消创息用的户 在键字关 cB c给出一个电子邮后件址地表,定一个指或个多盲写副本。 复虽然 Bcc在 送方出发,现当但信息送发时邮件系,统将它消从中除去。息每 接收
个
方
须检必查部头的 T o和 C 行以c定决息是直接发送还信是为盲作副发送本的些有 件邮统系正在部文分加信附息告来接收者诉是一个它副本。盲其它接 者收知道 不哪有些用户接到盲副本收。电 邮子使用与件统的传办室公备忘相录同格式和的语术头:包部与括 息有消关信的,息文正括包消息本文。电子件头邮部行说明发的送、方收方接、日 期主、、题当收到应副的本人列的。表( )扩展5字 段果想如信在中加入头R F8C22中没 规有定字段的,就需要创建非准字标 段 方。非常简法单,要在自定只义的头信字段的前面使用 X-前缀。名FR8C2 将这2 方种称法为展扩段。字义 例。如 :-LOXOP字段 X -LOP 字O段用来止防件邮循的传送环过滤或邮件列。处表理序程可以 ,给它理处每个的信增加一个 X件L-OP O段,以字后可以就据根个这段字中有的含 特别,值断判个一件信是否被环传循。 如送果认邮确件生了循环,发滤或邮件列过表处理 序就程可用不以的方式同理处该信件 。X-◆aiMelr 字 X段M-ilera 段字于指示什用样的程序产生么这了信个,件是它使最广泛 用扩展字的段 。产生邮的件软件可为所以有发送信的件增合加的适X Mai-elr字段 ,字该段不含有仅软件的称,还名含包软件的版本。号如例件名为软 Ltitlefxo ailMe,版本r 为V.0,1 以将可X-M“alir:Leittefol Mxilae r1V.”0加邮到信 头件中去。事 实上经已许多扩展有段字广泛被应,用没但有准定标
2 7 图-2 列 出一些了因在网特电邮子件可以找中的到通普关键,字以及使用它 们的的。目关键字 义含
Fomr 发送地址方To Cc 接 收地址方复制 本副址
地
Daet 信创息日建 S期bujce t信息主题Re pylTo-回 地址复X-Ch raes 使用t的符字(集通为 A常CSII)X M-iael r送信发所使息的用件软X- Sednre 发方地址送副本 X-的acFe 编码的经发送方孔的图面象
整
个系统的核是心收信发的件作,操因此为了便维方,以护的升后,级 故这将个两主要最操作写的类库.成ldl 形式的,以件组的式形加载到主序程中而 ,其它且的功如果能要的话需,可以也过通样的组这的形式增加到件主序程。这中也 体现了C S ahrp这 一新的微主推语软的言便和方高。而校这样且做也便了我方们小组 的程的顺序利合。结 5命名 控件 aMlSiedn由 在 C于 hSrap 语中,言是以命名控
都
件来组织序程的。所而有的类归都属 一于特个定命的名空下间需。的要名空间系命统身本带自一部分,了而且果 如统系没你有需要命名空的间话的就,以自己可写编,节本中这的个命空名就间
是由于需要
而写的编而。调用某一类个的某个变中量员的成法就方通是 过命空 间名名.类名.变成员量 来问访,当的在 然C Sarhp中 如在程果开始通序过Us ni g命空间名名,就以可直接象 的C+那样+访来问员成量,可变以说当相的方便,这 都会些在序程中现体出,再次不再做来过的叙述。多 5.15. .111 发 送邮件类Sm ptMal i主成员要变量明 网说络连接类实例及T pcCieln tc
t 为CP T络网服务提供客户端接连类T cClpent i实对象 例ct。TpCclinte类提 了供一些单的方简法,于用在同步阻塞式下模过网络来连接通发、送和收接 数据流而。实例化过的程也连接 SM是T P服务器过程的。的它重方载法之的两 个一参数一个服为器名务称符串,另一字为个务服的埠。器 2)提用于网络供问的基访数据流础及其例实 NteorwSkrtema n 此s提供类问网络访基的础数据的流法方。中其基本也是最重最要两个的 方法是就W irt()和 eRae()d法,至方参数不于次再述赘。 3一维字)符数串变组量 ilePath 此F字串数符主组要来存用用放选户择附的件绝的对径名路,在并送发带附 的邮件时用到件。4 发送)邮所需的件本参基 数比如用于 SETM P录检等验用的户名用、密,发送码件需邮的收要人信发,信人 址地及主题等以等此不再赘在述 5.1.。 2主要成员数说明
1)重载的构造函函 S数tpmailM()
此函数
主用于要初始化在程过中把用,选户择附的的件径路参以的形 数传式给 FielaPht 2)。添附加的函件数A ddAtatchmnt e给 File传Ptha 路的,径过通样一这函数个就可循环的以动的态添加 IL到sti接口的一个 象中对,了方便以后具在体的实的现过程中的使。 用3得到上)的传附件的件流 G文tSetrae 由于在m网中的络作都操是以络网流形式的来实的现,此先因将上传附的 转件换成件流,然后文用 再riteW 方的法这把些件附文的件流写入到网络,中 完来发送附件成操作的具。实体现码如下所代示 :rpvatei srtin gGettreaSsmrtnig ilePFth a/建/文件立对流 //.eS象teamr FleitSnrw //.eetSraemFlePati,//.eMohed.pOen byt;e[] ynbe bywet/[.n/32FiltetS.rLngteh;]F ileSrt.eadRy,b,0by.engthL F;iletr.CSloe;s /./sea46trinSgyb
4;)将符字串码编 B为aes64 字符串的数函
aseB64Ecnod
e
于 ESM由P T的LO IGN 证机制是认采用B aes64编 码当用,户出 发AUHTLGION 命令的后,务服器回返33 4的应码等待用答户入。如输果份确认后身务器返回 服32 5应答码,否的返回失败信则息。以要所将用名和户密码换转成Ba es46 码然 编后发再服给器。此函务数的用作是就把给的字符
定串转成相换应 的Baes46 编码
的字
符。串 发送 5STMP命 的函数令Send ommaCn
d这
函个的数作是把 用MTSP 令命字的符串转换成应对的节字值(型C#中 规定的W iret方 只能法入写节字型数据)的后然写入络网,如中操果作成功返回就 一标个为真志的布型变量尔,如果操作失或者发败异生常就返标回志为假的布 尔变量型。体具代码如所示:下 rpiave tbol oeSdComnmnastrdng stri
//
义定一个组 数bte[y]W rietuBffer //设;定个布一尔型类的量 变obo ltasefaltes; ritWBuffere/ /.Bteysts;
r/加入/防机错制可以有,效高程提运序的行率和捕效获错信息出 try
//网络向中入数据 n写sWri.etWiretuBferf,,Wr0iteuffBre.enLgt; htsaterteu
;
ctahcExeptiocn xe
//回出错信返息Mes sgeBaxoShow ex..oSTting ; srtatfelas;e
//返回志位标re utn srtte;
a
6
接受服务
器答应函数 R的cevRsepose
n
的它用作是就网络从中读取流务器返回的字服节型信的息将其转换成 ,字串符的变型量然,后其将返,回可通过以返回值来判断其操作是否功。 成体实具 现码如代所下: 示priavt stering RecResvpose
nni tSrteaSmize; string 0RternVuaue l"; //定义一"字个型的节组 b数ty[] ReaeBuffdr ter yenw bte[y1042]
;/从网络流中/读数据取,返并读回取个数的 SreamStiezsnR.edRaedBuaffr,0e,RadBeffue.Lergnth
;
ca
cth Exepciot nxe
/
返回异常信/ //息t.rng i
i;f StremSize!0
a//
将当读取前的信息转换成字符串型后返回 然etRurValne //uS.ritnRgeaBuffedrS.ustbirgn,S0tremaiSze
;r
tuer RenutnVralue;
7
重载的函 数Daligo它 的们用是与作服务器交,互送发令并接收回应。 命不的是参同是数符 串字类型的个那数函每,发次送条命令一并接,