procedure TForm1.btnSendClick(Sender: TObject);
begin
  with IdSMTP1 do
  begin
    AuthenticationType:=atLogin;
     Host:=edtHost.Text;
     Username:=edtUserName.Text;
     Password:=edtPassword.Text;
     Port:=StrToInt(edtPort.Text);
     try
       Connected;
     except
       ShowMessage('连接失败!');
       IdSMTP1.Free;
       IdMessage1.Free;
       Exit;
     end;
  end;
  with IdMessage1 do
  begin
    From.Address:=edtFrom.Text;
    Subject:=edtSubject.Text;
    Recipients.EMailAddresses:=edtTo.Text;
    Body.Clear;
    Body.Text:=edtBody.Text;
  end;  try
    IdSMTP1.Send(IdMessage1);   //这里异常
    ShowMessage('邮件发送成功!');
  except
    Application.MessageBox('邮件发送失败!!!','提示',MB_OK+MB_ICONERROR);
    IdSMTP1.Free;
    IdMessage1.Free;
    Exit;  end;
  IdSMTP1.Free;
  IdMessage1.Free;
end;

解决方案 »

  1.   

    哈哈,这不是你的问题,是现在的邮箱都有安全性设置,它不允许你直接将信发到某人邮箱里。你想一想:如果我编个邮件发送程序,可以直接将信发到你邮箱,那我只要几分钟,就可以让你的邮箱爆满,且你还不知道是谁发来的那么多垃圾邮件,从而你的邮箱就无法拒收。我们现在网上的邮件发送,都是通过发送者邮箱所在的邮件服务器来“转发”的,并非是在你电脑上,用某个软件直接发到对方邮箱里的。这样做的目的,是让对方知道这信是谁发来的。2000年代以前,很多网上的邮件服务器,的确可以直接接收那些用比如:Fastmail发送的匿名邮件,但现在不行了。