大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 用Delphi编写邮件特快专递程序

用Delphi编写邮件特快专递程序

时间: 2021-07-31 作者:daque

陈旭波 “邮件特别旅客快车速寄”这个词此刻仍旧是被宏大的网民所熟知了,它就比如是搜集上的ems,不妨径直把邮件送给对方的邮箱中,邮件发送结束后,对方就不妨连忙收到。foxmail在其最新的4.0本子中也更加新增了该功效,动作一名编制程序喜好者,你是否也想领会怎样编制程序实行该功效呢?那就随正文一道显现“邮件特别旅客快车速寄”的神奇面纱: 一、实行道理 在outlook express中,可经过察看邮件的属性获得该邮件的头部材料。咱们拿一封不是特别旅客快车速寄的普遍邮件来举行领会,底下是笔者一封邮件的头部材料: received: from sm1.163.com([202.108.44.203]) by peoplemail.com.cn(jetmail 2.5.3.0) with smtp id jm1ac3c063eec; thu, 29 nov 2001 07:20:25 -0000 received: from xubo (unknown [61.154.94.146]) by sm1.163.com (postfix) with esmtp id 99cf11c461061 for ; thu, 29 nov 2001 15:12:49 +0800 (cst) …… 从该头部材料不妨看出,邮件传播的道路是由xubo→sm1.163.com→peoplemail.com.cn,个中xubo是自己地方呆板,邮件是经过sm1.163.com这其中转站才送给手段地的,而咱们凡是所说的邮件特别旅客快车速寄,即是把邮件直迎送到手段地而不须要中间转播站。 怎样本领领会手段地的地方呢?咱们领会电子邮件的地方由用户名(username)和邮箱域名(address.com)两局部形成的,给域名效劳器发送对准“address.com”的mx训令查问即可找到手段地的地方。被查出来的手段地大概不只一个,偶尔那些手段地是有优先级别之分的,辨别对应着邮件的优先级别,你不妨按照邮件优先级的各别对应发送,也不妨大肆采用个中一个发送,正文的示例将采用反应回顾的第一个手段地发送,读者群可按照本质须要举行矫正。 二、用到的中心组件 正文将沿用indy控件集举行域名查问、邮件发送局部的编制程序。indy的全名是internet direct(也叫winshoes),是一套盛开源代码、跨平台、特出的internet控件集,它扶助大局部时髦的internet和议。delphi 6仍旧包括了该控件集,即使你运用的是delphi 6往日的本子,请先到indy网页http://www.nevrona.com/indy/download.html载入并安置该控件集。 三、窗口安排 向窗体上安置三个tedit组件,一个tmemo组件,四个tlabel组件,用到的indy组件为tiddnsresolver、tidantifreeze、tidsmtp、tidmessage。个中tiddnsresolver是用来向域名效劳器发出查问乞求并获得截止,tidmessage用来建立邮件,tidsmtp用来发送邮件,tidantifreeze不妨保证indy在处事时步调能相应来自外界的动静(注:indy是以同步的办法举行处事的,在读或写操纵实行之前,其它代码没辙实行,介入tidantifreeze不妨在每隔一段功夫经过呼唤application.processmessage本领相应来自外界的动静。) 步调的界面如次图所示(箭镞所指向的笔墨标识了该组件的名字): 四、步调代码(代码中包括了精细的证明) ……(前方一局部简略) type tform1 = class(tform) iddnsresolver: tiddnsresolver; idantifreeze1: tidantifreeze; btnsend: tbutton; idsmtp: tidsmtp; idmsgsend: tidmessage; mmcontent: tmemo; label1: tlabel; edtto: tedit; label4: tlabel; label5: tlabel; edtfrom: tedit; label6: tlabel; edtsubject: tedit; procedure btnsendclick(sender: tobject); private { private declarations } procedure getmxlist(amxlist: tstringlist; aqname: string); public { public declarations } end; var form1: tform1; implementation {$r *.dfm} { tform1 } { 这个进程是用来获得邮件特别旅客快车速寄手段地效劳器称呼及优先级别数,参数amxlist是 用来接受截止值,aqname代办传播过来的域名 } procedure tform1.getmxlist(amxlist: tstringlist; aqname: string); var i: integer; begin with iddnsresolver do begin host := '202.101.107.55'; { host属性用来指定域名效劳器的地方,此处为笔者地方地 的主域名效劳器地方,你也不妨指定任一不妨赶快考察到的internet上域名效劳器 地方,要领会本人地方地的域名效劳器地方,win98下经过winipcfg吩咐,win2000下 经过ipconfig /all即可查出。} receivetimeout := 10000; // 在指定的功夫内得不到域名效劳器的反应,则视为波折。 clearvars; // 废除前一次查问所反应回顾的资源记载 { 建立此次查问的头部构造 } with dnsheader do begin qr := false; // false 代办查问 opcode := 0; // 0代办规范域名查问 rd := true; //域名效劳器不妨举行递归查问 qdcount := 1; //查问的数目 end; { 建立要查问的题目 } dnsqdlist.clear; with dnsqdlist.add do begin qname := aqname; //要查问的域名 qtype := cmx; //qtype指定要查问的资源记载的品种,值为cmx代办邮件调换记载 qclass := cin; end; resolvedns; //向域名效劳器发出乞求 { 从域名效劳器接受反应的截止,将反应回顾的邮件效劳器称呼放在amxlist列表的name局部, 邮件效劳器的优先级别数放在value局部。 } for i := 0 to dnsanlist.count - 1 do amxlist.add(dnsanlist[i].rdata.mx.exchange + '=' + inttostr(dnsanlist[i].rdata.mx.preference)); end; end; { 单击"发送"按钮时发送速寄邮件 } procedure tform1.btnsendclick(sender: tobject); var mxlist: tstringlist; i: integer; qname, thoughaddress: string; begin { 按照用户所填写的实质创造邮件 } with idmsgsend do begin body.assign(mmcontent.lines); //邮件正文 from.address := trim(edtfrom.text); //发件人地方 recipients.emailaddresses := trim(edtto.text); //收件人地方 subject := edtsubject.text; //邮件中心 end; { 从输出的收件人地方中掏出邮箱域名,运用前方的getmxlist进程获得手段地地方 } qname := trimright(copy(edtto.text, pos('@', edtto.text) + 1, length(edtto.text))); mxlist := tstringlist.create; try getmxlist(mxlist, qname); thoughaddress := mxlist.names[0]; {取反应回顾的第一个效劳器为手段地,读者群可 按照本质须要矫正,比方说商量到函件的优先级或当你采用的效劳器因劳累而姑且 不许处置你的函件时,换用其它效劳器试试 } finally mxlist.free; end; { 发送邮件 } with idsmtp do begin host := thoughaddress; // 将host赋值为手段地,这即是特别旅客快车速寄与普遍邮件的辨别 port := 25; // smtp效劳默许的端口为25 connect; //贯穿到效劳器 try send(idmsgsend); //发送方才创造的邮件 showmessage('发送结束'); //发送结束后提醒 finally disconnect; //割断效劳器贯穿 end; end; end; end. 本步调在windows 2000 + delphi 6 下调节和测试经过。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.