如何使用Delphi編寫郵件特快專遞程序

字號:

“郵件特快專遞”這個詞現(xiàn)在已經(jīng)是被廣大的網(wǎng)民所熟知了,它就好比是網(wǎng)絡(luò)上的EMS,能夠直接把郵件送到對方的郵箱中,郵件發(fā)送完畢后,對方就可以立刻收到。Foxmail在其最新的4.0版本中也特別新增了該功能,作為一名編程愛好者,你是不是也想知道如何編程實現(xiàn)該功能呢?那就隨本文一起揭開“郵件特快專遞”的神秘面紗:
    一、實現(xiàn)原理
     在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是本人所在機器,郵件是經(jīng)由sm1.163.com這個中轉(zhuǎn)站才送到目的地的,而我們平常所說的郵件特快專遞,就是把郵件直接送到目的地而不需要中轉(zhuǎn)站。
    如何才能知道目的地的地址呢?我們知道電子郵件的地址由用戶名(username)和郵箱域名(address.com)兩部分構(gòu)成的,給域名服務(wù)器發(fā)送針對“address.com”的MX指令查詢即可找到目的地的地址。被查出來的目的地可能不止一個,有時這些目的地是有優(yōu)先級別之分的,分別對應(yīng)著郵件的優(yōu)先級別,你可以根據(jù)郵件優(yōu)先級的不同對應(yīng)發(fā)送,也可以任意選擇其中一個發(fā)送,本文的示例將選擇反饋回來的第一個目的地發(fā)送,讀者可根據(jù)實際需要進行改進。
    二、用到的核心組件
    本文將采用Indy控件集進行域名查詢、郵件發(fā)送部分的編程。INDY的全名是Internet Direct(也叫Winshoes),是一套開放源代碼、跨平臺、優(yōu)秀的Internet控件集,它支持大部分流行的Internet協(xié)議。Delphi 6已經(jīng)包含了該控件集,如果你使用的是Delphi 6以前的版本,請先到Indy主頁http://www.nevrona.com/Indy/Download.html下載并安裝該控件集。
    三、窗口設(shè)計
    向窗體上放置三個TEdit組件,一個TMemo組件,四個Tlabel組件,用到的Indy組件為TIdDNSResolver、TIdAntiFreeze、TIdSMTP、TIdMessage。其中TIdDNSResolver是用來向域名服務(wù)器發(fā)出查詢請求并得到結(jié)果,TIdMessage用來構(gòu)建郵件,TIdSMTP用來發(fā)送郵件,TidAntiFreeze可以確保Indy在工作時程序能響應(yīng)來自外界的消息(注:Indy是以同步的方式進行工作的,在讀或?qū)懖僮魍瓿芍?,其它代碼無法執(zhí)行,加入TidAntiFreeze可以在每隔一段時間通過呼叫Application.ProcessMessage方法響應(yīng)來自外界的消息。)