⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emsf.pas

📁 "邮件特快专递"这个词现在已经是被广大的网民所熟知了
💻 PAS
字号:
unit emsf;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdMessage, IdAntiFreezeBase, IdAntiFreeze, IdTCPConnection,
  IdTCPClient, IdMessageClient, IdSMTP, IdBaseComponent, IdComponent,
  IdUDPBase, IdUDPClient, IdDNSResolver, StdCtrls, ExtCtrls, ComCtrls,
  Grids, DBGrids, ADODB, DB, Buttons;

type
  TEms_Form = class(TForm)
    edtTo: TEdit;
    edtFrom: TEdit;
    edtSubject: TEdit;
    mmContent: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    IdDNSResolver: TIdDNSResolver;
    IdSMTP: TIdSMTP;
    IdAntiFreeze1: TIdAntiFreeze;
    IdMsgSend: TIdMessage;
    dnsedt: TLabeledEdit;
    StatusBar1: TStatusBar;
    ADOConnection1: TADOConnection;
    ADOCommand1: TADOCommand;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    procedure GetMxList(AMxList: TStringList; AQName: string);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Ems_Form: TEms_Form;

implementation

{$R *.dfm}
{ 这个过程是用来得到邮件特快专递目的地服务器名称及优先级别数,参数AMXList是 
用来接收结果值,AQName代表传递过来的域名 }
procedure TEms_Form.GetMxList(AMxList: TStringList; AQName: string);
var
i: Integer;
begin
with IdDNSResolver do
begin
Host :=dnsedt.text;  //   '202.96.134.178';
{ Host属性用来指定域名服务器(DNS)的地址,此处为笔者所在地
的主域名服务器地址,你也可以指定任一可以快速访问到的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 TEms_Form.BitBtn1Click(Sender: TObject);
var
MxList: TStringList;
i: Integer;
QName, ThoughAddress: string;
begin
{ 根据用户所填写的内容创建邮件 }
with IdMsgSend do
begin
Recipients.EMailAddresses := Trim(edtTo.Text); //收件人地址
From.Address := Trim(edtFrom.Text); //发件人地址
Subject := edtSubject.Text; //邮件主题
Body.Assign(mmContent.Lines); //邮件正文
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;

procedure TEms_Form.BitBtn2Click(Sender: TObject);
begin
close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -