对于IdSMTPServer我只做了如下的修改:IdSMTPServer.bindings:= '127.0.0.1:25';
IdSMTPServer.Active:= True;
我想给[email protected]发邮件:
我用IdDNSResolver解析出163.com的qtMX为202.106.185.75但我却蒙了。这个地址该
用在哪呢,开始用在IdMessage.Recipients.EmailAddresses; 不行,后来干脆用在
IdSMTP.host还是不行。查看了IdSMTPServer帮助,发现没有提供方法去实现邮件的转发(可能是它自动完成的转发),都是163.com的"System busy"惹的获

解决方案 »

  1.   

    delphi->demos->indy->mailclient
      

  2.   

    To:  naughtyboy(一切都是为了明天) 
    我是想通过我自己的IdSMTPServer直接把邮件发送到对方的邮箱中,但我不知道可不可以用
    POP3Server直接发送到对方的POP3Server中,反正就是尽量用我自己的程序来处理
      

  3.   

    样例:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      IdMessage, IdAntiFreezeBase, IdAntiFreeze, IdTCPConnection, IdTCPClient,
      IdMessageClient, IdSMTP, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPClient, IdDNSResolver, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        edtFrom: TEdit;
        edtTo: TEdit;
        Label3: TLabel;
        edtSubject: TEdit;
        mmContent: TMemo;
        Label4: TLabel;
        Button1: TButton;
        IdDNSResolver1: TIdDNSResolver;
        IdSMTP: TIdSMTP;
        IdAntiFreeze1: TIdAntiFreeze;
        IdMsgSend: TIdMessage;
        mmLog: TMemo;
        Label5: TLabel;
        Button2: TButton;
        procedure GetMxList(AMxList: TStringList; AQName: string);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.GetMxList(AMxList: TStringList; AQName: string);
    var
      i: Integer;
    begin
      with IdDNSResolver1 do
      begin
        Host := '192.168.10.1'; { 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;  mmLog.Lines.Add('DNS Host:'+IdDNSResolver1.Host);
      mmLog.Lines.Add('Resolve '+AQName);
      mmLog.Lines.Add('Resolve DNS.Waiting...');
      ResolveDNS; //向域名服务器发出请求{ 从域名服务器接收反馈的结果,将反馈回来的邮件服务器名称放在AMXList列表的Name部分,
    邮件服务器的优先级别数放在Value部分。 }
      for i := 0 to DNSAnList.Count - 1 do
       begin
         AMxList.Add(DNSAnList[i].RData.MX.Exchange + '=' +
         IntToStr(DNSAnList[i].RData.MX.Preference));
         mmLog.Lines.Add(AMxList.Strings[i]);
        end;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MxList: TStringList;
      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
        mmLog.Lines.Add('Send mail user host '+Host+'.Connectting...');
        Connect; //连接到服务器
        try
          mmLog.Lines.Add('Sending...');
          Send(IdMsgSend); //发送刚才创建的邮件
          mmLog.Lines.Add('发送完毕'); //发送完毕后提示
        finally
          Disconnect; //断开服务器连接
        end;
      end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      close;
    end;end.
      

  4.   

    帮不了你,帮你T,用foxmal把服务器设成127.0.1 indy自带的演示程序 可以让foxmail发出去,但对方却收不到。
      

  5.   

    有人试过 ice__man(兵仔) 的程序吗?是否可以运行?
      

  6.   

    当然可以运行了,我还有全部的源代码,有兴趣的话,邮我,给你全部的源代码及可执行文件[email protected]
      

  7.   

    一看ice__man(兵仔)就知道是D6的,D7下不能用。 ice__man(龙行天下) 可不可以发一份给我(源程序和执行程序一起,我怕D7不能编译)?[email protected]