中山比尔科技 / 中山华盛科技有限公司 中山比尔/中山华盛科技有限公司   中山比尔/中山华盛科技有限公司 设为主页  |  加入收藏  
  中山比尔/中山华盛科技有限公司
 
中山华盛科技有限公司
ERP软件
POS软件
其他硬件
解决方案
Linux/Unix
 
ERP软件
ERP管理系统解决方案(分模块)
服装ERP管理软件解决方案
电子厂ERP管理软件解决方案
灯饰厂ERP管理软件解决方案
鞋业ERP管理软件解决方案
卫浴洁具ERP管理软件解决方案
POS软件
商场百货总部-分店连锁解决方案
商场百货POS管理软件解决方案
超市POS管理软件解决方案
连锁店总部-分店解决方案
连锁店POS管理软件解决方案
服装连锁POS管理软件解决方案
连锁型会员解决方案
POS硬件
商业POS机
商业数据中心服务器
其他硬件
工业型-数据采集器-HT3600
商业型-数据采集器-HT3300
条形码打印机-斑马Zebra888
条形码打印机-斑马Zebra140XI
条形码打印机-斑马Zebra170XI
条形码打印机-TSC 243E
条形码打印机-东芝 TEC B-452
条形码打印机-立象 OS-214
条形码阅读器-Metrologic6130
条形码阅读器-Argox RF800
条形码阅读器-SymbolLs4004P
解决方案
企业网络解决方案
ICEFLOW VPN应用
VPN在DRP连锁分销管理中应用
知识平台
DELPHI编写邮件特快专递程序
DELPHI中数据的自动录入
DELPHI访问数据库结构
DELPHI的"八皇后"问题
API实现在MSN的信息提示
DELPHI编写蠕虫病毒浅析
开源软件-Linux/Unix
三十种Linux发行版名称含义祥解
站在开源社区,建立开放新世界
从Windows转向UNIX的一些困惑
Linux系统更耐网络攻击
开源开发模式是否适合商业用户
开源程序应用仍然有待改善
 
 
 
客户案例
   
  您现在的位置是: 中山华盛科技主页 - 软件开发 / 知识平台 - 如何使用Delphi编写邮件特快专递程序
 
   
 

如何使用DELPHI编写邮件特快专递程序

 
http://dev.21tx.com 2006年04月10日 赛迪网 陈旭波
 

“邮件特快专递”这个词现在已经是被广大的网民所熟知了,它就好比是网络上的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 下调试通过。

 
 
 
 
 
 
 

 

 
 
网站导航: 首 页|关于我们|新闻中心|ERP软件产品|POS软件产品|硬件产品|客户案例|知识平台|软件下载|解决方案|服务与支持|联系我们|汇款帐号|工作机会|法律条款|网站地图|客户留言
   友情链接:
              汽车租赁      注册香港公司  上海网站建设  上海网站制作 上海网页制作 网站制作      无忧维修网   杭州送水站  POS系统       进销存软件    POS机
              电脑维修网    收银系统      更多友情链接   注册公司
     

Copyright@2006-2009 中山比尔/中山华盛科技有限公司版权所有 网站设计:中山华盛科技  网站优化:中山华盛科技
电话:  0760-8862282 / 0760-8161185 / 0760-8613158 / 0760-8150358 传真: 0760-8862049 / 0760-8615118 / 0760-8862049
地址:  广东省中山市西区西苑广场富荣阁17楼C座(技术部) / 广东省中山市石岐区永胜广场7楼C座(开发部)
        广东省中山市西区西苑电脑城1楼1029(门市) / 广东省中山市西区颐高数码广场1楼F08(门市)
联系人:汪经理 (13590742255) / 黄经理 (13590757383)