Então jorge, só conheço thread em conceito nunca programei uma thread 
no delphi, peguei um exemplo mas mesmo assim não funcionou, veja como 
ficou o código:

unit uEncaminhamentosAuto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
Forms,
  Dialogs, DB, IBCustomDataSet, IBQuery, RxMemDS, Grids, DBGrids,
  CheckDBGrid, StdCtrls, Buttons, ImgList, ComCtrls, ToolWin, 
ExtCtrls,
  Gauges, IBStoredProc, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, IdBaseComponent, IdMessage;

type
  TfrmEncaminhamentosAuto = class(TForm)
    memEmpresa: TRxMemoryData;
    qrEmpresa: TIBQuery;
    btnEnviar: TBitBtn;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    gauProgresso: TGauge;
    Bevel1: TBevel;
    cgridEmpresas: TCheckDBGrid;
    btnFechar: TBitBtn;
    memEmpresaEMP_FLAG: TBooleanField;
    memEmpresaEMP_CODIGO: TStringField;
    memEmpresaEMP_RAZAOSOCIAL: TStringField;
    dsEmpresas: TDataSource;
    memEmpresaEMP_CIDADE: TStringField;
    memEmpresaEMP_UF: TStringField;
    spEncaminhamentos: TIBStoredProc;
    memEmpresaEMP_SEGMENTO: TStringField;
    btnPesquisar: TBitBtn;
    qrTemp: TIBQuery;
    memEmpresaEMP_EMAIL: TStringField;
    edCodigoCliente: TEdit;
    PesqCodigoCliente: TSpeedButton;
    edNomeCliente: TEdit;
    PesqNomeCliente: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    edCurriculo: TEdit;
    PesqArquivo: TSpeedButton;
    Label3: TLabel;
    edHeadHunter: TComboBox;
    cbIncluir: TCheckBox;
    OpenDialog: TOpenDialog;
    edAssinatura: TMemo;
    Memo2: TMemo;
    edEmail: TEdit;
    edSenha: TEdit;
    IdMsgSend: TIdMessage;
    SMTP: TIdSMTP;
    edMensagemModelo: TMemo;
    edMensagemGerada: TMemo;
    btnCancelar: TBitBtn;
    procedure btnFecharClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure edCodigoClienteEnter(Sender: TObject);
    procedure PesqCodigoClienteClick(Sender: TObject);
    procedure PesqNomeClienteClick(Sender: TObject);
    procedure edCodigoClienteExit(Sender: TObject);
    procedure edCodigoClienteKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnPesquisarClick(Sender: TObject);
    procedure edCodigoClienteKeyPress(Sender: TObject; var Key: Char);
    procedure memEmpresaBeforeEdit(DataSet: TDataSet);
    procedure PesqArquivoClick(Sender: TObject);
    procedure edCurriculoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edCurriculoExit(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure edHeadHunterExit(Sender: TObject);
    procedure edHeadHunterChange(Sender: TObject);
    procedure cbIncluirClick(Sender: TObject);
    procedure btnCancelarClick(Sender: TObject);
    procedure btnEnviarClick(Sender: TObject);
  private
    { Private declarations }
    valida_email,
    parar       : Boolean ;
  public
    { Public declarations }
  end;

  TThreadEmail = class(TThread)
      protected
      constructor Create;
      procedure Execute; override;
      procedure EnviaEmail;
  end;

var
  frmEncaminhamentosAuto: TfrmEncaminhamentosAuto;
  var_prospecao_sp     ,
  var_prospecao_brasil ,
  var_prospecao_cidade ,
  var_prospecao_uf     ,
  var_prospecao_areas  : String ;

implementation

uses uMenuPrincipal, uPesquisa, Funcoes;

{$R *.dfm}

procedure TfrmEncaminhamentosAuto.btnFecharClick(Sender: TObject);
begin
     close ;
end;

procedure TfrmEncaminhamentosAuto.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
     frmEncaminhamentosAuto := Nil ;
     Action := caFree ;
end;

procedure TfrmEncaminhamentosAuto.edCodigoClienteEnter(Sender: 
TObject);
begin
     self.Top := ((frmMenuPrincipal.clientHeight-self.Height) div 2) -
 32;
end;

procedure TfrmEncaminhamentosAuto.PesqCodigoClienteClick(Sender: 
TObject);
begin
     //Chama o form
     If FrmPesquisa = Nil Then Begin

        FrmPesquisa := TFrmPesquisa.Create( Self ) ;
        FrmPesquisa.Show ;

     End;

     //Pesquisa de CPF
     FrmPesquisa.qrPesquisa.Active := False ;

     FrmPesquisa.qrPesquisa.SQL.Clear ;

     FrmPesquisa.qrPesquisa.SQL.Add('SELECT CLI_CODIGO AS CODIGO, 
CLI_NOME AS NOME_DO_CANDIDATO');
     FrmPesquisa.qrPesquisa.SQL.Add('FROM ARQCLIENTES') ;
     FrmPesquisa.qrPesquisa.SQL.Add('ORDER BY CLI_CODIGO');

     FrmPesquisa.qrPesquisa.Active := True ;

     //Strings de Pesquisa
     FrmPesquisa.SQL1:= 'SELECT CLI_CODIGO AS CODIGO, CLI_NOME AS 
NOME_DO_CANDIDATO FROM ARQCLIENTES WHERE CLI_CODIGO LIKE';
     FrmPesquisa.SQL2:= 'ORDER BY CLI_CODIGO';

     //Campos
     FrmPesquisa.TxtCampoChave := 'CODIGO' ;
     FrmPesquisa.TxtCampoResp := 'CODIGO' ;
     FrmPesquisa.EdResp := Self.edCodigoCliente ;
end;

procedure TfrmEncaminhamentosAuto.PesqNomeClienteClick(Sender: 
TObject);
begin
     //Chama o form
     If FrmPesquisa = Nil Then Begin

        FrmPesquisa := TFrmPesquisa.Create( Self ) ;
        FrmPesquisa.Show ;

     End;

     //Pesquisa de CPF
     FrmPesquisa.qrPesquisa.Active := False ;

     FrmPesquisa.qrPesquisa.SQL.Clear ;

     FrmPesquisa.qrPesquisa.SQL.Add('SELECT CLI_NOME AS 
NOME_DO_CANDIDATO, CLI_CODIGO AS CODIGO');
     FrmPesquisa.qrPesquisa.SQL.Add('FROM ARQCLIENTES') ;
     FrmPesquisa.qrPesquisa.SQL.Add('ORDER BY CLI_NOME');

     FrmPesquisa.qrPesquisa.Active := True ;

     //Strings de Pesquisa
     FrmPesquisa.SQL1:= 'SELECT CLI_NOME AS NOME_DO_CANDIDATO, 
CLI_CODIGO AS CODIGO FROM ARQCLIENTES WHERE Upper(CLI_NOME) LIKE';
     FrmPesquisa.SQL2:= 'ORDER BY CLI_NOME';

     //Campos
     FrmPesquisa.TxtCampoChave := 'NOME_DO_CANDIDATO' ;
     FrmPesquisa.TxtCampoResp := 'CODIGO' ;
     FrmPesquisa.EdResp := Self.edCodigoCliente ;
end;

procedure TfrmEncaminhamentosAuto.edCodigoClienteExit(Sender: 
TObject);
begin
     if (self.edCodigoCliente.Text = '') then
     begin
          self.edCodigoCliente.Clear;
          exit;
     end;

     self.edNomeCliente.Clear;
     var_prospecao_sp          := '' ;
     var_prospecao_brasil      := '' ;
     var_prospecao_cidade      := '' ;
     var_prospecao_uf          := '' ;
     var_prospecao_areas       := '' ;

     self.spEncaminhamentos.StoredProcName := 'SL_ARQCLIENTES';
     self.spEncaminhamentos.ParamByName('PAR_CLI_CODIGO').Value:= 
self.edCodigoCliente.Text;
     self.spEncaminhamentos.ExecProc;

     if self.spEncaminhamentos.ParamByName('RET_CLI_CODIGO').AsString 
= '' then
     Begin
          Application.MessageBox('Código de Cliente inválido, favor 
verificar.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          self.edCodigoCliente.SetFocus ;
          Exit ;
     End;

     if self.spEncaminhamentos.ParamByName
('RET_AREAFORMACAO').AsString = '' then
     Begin
          Application.MessageBox('Favor atualizar a Área de Atuação 
no Cadastro do Cliente.','Mensagem do 
Sistema',MB_ICONEXCLAMATION+MB_OK);
          self.edCodigoCliente.SetFocus ;
          Exit ;
     End;

     self.qrTemp.Close ;
     self.qrTemp.SQL.Text := 'SELECT CLI_CODIGO FROM 
ARQAREA_CANDIDATO WHERE ARE_CODIGO = ''0098'' AND CLI_CODIGO = ' + 
QuotedStr( self.edCodigoCliente.Text ) ;
     self.qrTemp.Open ;

     if self.qrTemp.RecordCount > 0 then
        var_prospecao_areas    := '1';

     self.edCodigoCliente.Text := self.spEncaminhamentos.ParamByName
('RET_CLI_CODIGO').AsString;
     self.edNomeCliente.Text   := self.spEncaminhamentos.ParamByName
('RET_CLI_NOME').AsString;
     var_prospecao_sp          := self.spEncaminhamentos.ParamByName
('RET_CLI_PROSP_SP').AsString;
     var_prospecao_brasil      := self.spEncaminhamentos.ParamByName
('RET_CLI_PROSP_BRASIL').AsString;
     var_prospecao_cidade      := MidString
(self.spEncaminhamentos.ParamByName
('RET_CLI_PROSP_CIDADE').AsString, '-');
     var_prospecao_uf          := MidString2
(self.spEncaminhamentos.ParamByName
('RET_CLI_PROSP_CIDADE').AsString, '-');
end;

procedure TfrmEncaminhamentosAuto.edCodigoClienteKeyDown(Sender: 
TObject;
  var Key: Word; Shift: TShiftState);
begin
     If Key = 120 Then
     Begin
          Self.PesqCodigoClienteClick( Sender );
     End;

     If Key = 121 Then
     Begin
          Self.PesqNomeClienteClick( Sender );
     End;
end;

procedure TfrmEncaminhamentosAuto.btnPesquisarClick(Sender: TObject);
var
     StrLiga: String;
begin
     if self.edCodigoCliente.Text = '' then
     begin
          Application.MessageBox('Favor selecionar um 
Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          self.edCodigoCliente.SetFocus ;
          Exit ;
     end;

     self.qrEmpresa.Close;
     self.qrEmpresa.SQL.Clear ;

     StrLiga:= 'WHERE ';

     self.qrEmpresa.SQL.Add('SELECT EMP.EMP_CODIGO, 
EMP.EMP_RAZAOSOCIAL, ARE.ARE_AREA, EMP.EMP_CIDADE, EMP.EMP_UF, 
EMP.EMP_EMAIL FROM ARQEMPRESAS EMP ');
     self.qrEmpresa.SQL.Add('LEFT OUTER JOIN ARQAREAS ARE ON
(EMP.ARE_CODIGO = ARE.ARE_CODIGO) ');
     self.qrEmpresa.SQL.Add('LEFT OUTER JOIN ARQCLIENTES CLI ON
(CLI.CLI_CODIGO = ' + QuotedStr( self.edCodigoCliente.Text ) + ') ');

     if var_prospecao_areas <> '1' then
     begin
          self.qrEmpresa.SQL.Add(StrLiga);

          //Verificando a área de atuação e as áreas de interesse do 
candidato
          self.qrEmpresa.SQL.Add('((EXISTS ( ');
          self.qrEmpresa.SQL.Add('SELECT AAC.ARE_CODIGO FROM 
ARQAREA_CANDIDATO AAC ');
          self.qrEmpresa.SQL.Add('WHERE EMP.ARE_CODIGO = 
AAC.ARE_CODIGO AND AAC.CLI_CODIGO = CLI.CLI_CODIGO)) ');
          self.qrEmpresa.SQL.Add('OR (EMP.ARE_CODIGO = 
CLI.CLI_AREA_FORMACAO) ');

          //0098 - TODAS (SERVE TODAS AS AREAS)
          self.qrEmpresa.SQL.Add('OR (EMP.ARE_CODIGO = ''0098'')) ');

          StrLiga:= 'AND ';
     end;

     //Se o cliente não tem interesse pelo Brasil inteiro, então 
validar as cidades que ele tem interesse
     if var_prospecao_brasil <> '1' then
     begin
          self.qrEmpresa.SQL.Add(StrLiga + '( ');

          //Verificando a cidade do Cliente
          self.qrEmpresa.SQL.Add('(UPPER(EMP.EMP_CIDADE) = UPPER
(CLI.CLI_CIDADE) AND EMP.EMP_UF = CLI.CLI_UF) ');

          //Verificando a Cidade de Interesse
          if var_prospecao_cidade <> '' then
          begin
               self.qrEmpresa.SQL.Add('OR (UPPER(EMP.EMP_CIDADE) = ' 
+ QuotedStr( UpperCase(var_prospecao_cidade) ) );
               self.qrEmpresa.SQL.Add('    AND EMP.EMP_UF = ' + 
QuotedStr( var_prospecao_uf ) );
          end ;

          //Verificando se tem interesse em SP
          if var_prospecao_sp = '1' then
             self.qrEmpresa.SQL.Add('OR (EMP.EMP_UF = ''SP'') ');

          self.qrEmpresa.SQL.Add(')');

          StrLiga:= 'AND ';
     end;

     //Validando se as empresas já enviadas entram na pesquisa
     if not self.cbIncluir.Checked then
     begin
          self.qrEmpresa.SQL.Add(StrLiga + '( ');

          self.qrEmpresa.SQL.Add('NOT EXISTS ( ');
          self.qrEmpresa.SQL.Add('SELECT ENC.EMP_CODIGO FROM 
ARQENCAMINHAMENTOS ENC');
          self.qrEmpresa.SQL.Add('WHERE EMP.EMP_CODIGO = 
ENC.EMP_CODIGO AND ENC.CLI_CODIGO = CLI.CLI_CODIGO)) ');
     end;

     self.qrEmpresa.SQL.Add('ORDER BY EMP.EMP_RAZAOSOCIAL DESC');

     self.qrEmpresa.Open;

     if self.qrEmpresa.RecordCount = 0 then
     begin
          Application.MessageBox('Não foi encontrada nenhuma Empresa 
no perfil do Cliente.','Mensagem do 
Sistema',MB_ICONINFORMATION+MB_OK);
          Exit ;
     end;

     self.valida_email := False ;

     self.memEmpresa.Close;
     self.memEmpresa.EmptyTable;
     self.memEmpresa.Open ;

     while not self.qrEmpresa.Eof do
     begin
          self.memEmpresa.Insert ;
          self.memEmpresa.FieldByName('EMP_CODIGO').Value      := 
self.qrEmpresa.FieldByName('EMP_CODIGO').AsString ;
          self.memEmpresa.FieldByName('EMP_RAZAOSOCIAL').Value := 
self.qrEmpresa.FieldByName('EMP_RAZAOSOCIAL').AsString ;
          self.memEmpresa.FieldByName('EMP_SEGMENTO').Value    := 
self.qrEmpresa.FieldByName('ARE_AREA').AsString ;
          self.memEmpresa.FieldByName('EMP_CIDADE').Value      := 
self.qrEmpresa.FieldByName('EMP_CIDADE').AsString ;
          self.memEmpresa.FieldByName('EMP_UF').Value          := 
self.qrEmpresa.FieldByName('EMP_UF').AsString ;
          self.memEmpresa.FieldByName('EMP_EMAIL').Value       := 
self.qrEmpresa.FieldByName('EMP_EMAIL').AsString ;

          self.memEmpresa.post;

          self.qrEmpresa.Next ;
     end;

     self.valida_email := True ;

     self.StatusBar1.Panels[0].Text := 'Total: ' + IntToStr
(self.memEmpresa.RecordCount) + ' empresas encontradas' ;

     self.cgridEmpresas.SetFocus ;
end;

procedure TfrmEncaminhamentosAuto.edCodigoClienteKeyPress(Sender: 
TObject;
  var Key: Char);
begin
     //Valida se a tecla e <enter>
     If Key = #13 Then
     Begin
          SelectNext( ActiveControl , True , True );
          Key := #0 ;
     End;
end;

procedure TThreadEmail.EnviaEmail;
var
     total, contador, i, codigo : integer ;
begin
     with frmEncaminhamentosAuto do
     begin
          memEmpresa.First ;

          total    := 0 ;
          contador := 0 ;

          while not memEmpresa.Eof do
          begin
               if memEmpresa.FieldByName('EMP_FLAG').AsBoolean then
                  total := total + 1 ;

               memEmpresa.Next ;
          end;

          if total = 0 then
          begin
               memEmpresa.First ;
               Application.MessageBox('Nenhuma Empresa foi 
Selecionada.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
               cgridEmpresas.SetFocus ;
               parar := True ;
               Exit ;
          end;

          //DEFININDO OS PARAMETROS
          with IdMsgSend do
          begin
               Body.Assign(Memo2.Lines);
               From.Text := edHeadHunter.Text;
               Subject := 'Grupo Monteiro - Apresentação de 
Profissional';
               Priority := TIdMessagePriority(1);
          end;

          //AUTENTICAÇÃO
          case Autenticacao of
              0: SMTP.AuthenticationType := atNone;
              1: SMTP.AuthenticationType := atLogin;
          end;

          //USUÁRIO E SENHA
          SMTP.UserID := edEmail.Text + '#pop.grupomonteiro.com.br';
          //SMTP.UserID := edEmail.Text;
          SMTP.Password := edSenha.Text;

          //CONFIGURAÇÃO DO SMTP
          SMTP.Host := ServidorSMTP;
          SMTP.Port := PortaSMTP;

          StatusBar1.Panels[0].Text := 'Conectando o servidor...';
          StatusBar1.Refresh;

          try
             SMTP.Connect;
          except
             Application.MessageBox(PChar('Ocorreu um erro ao 
conectar o Servidor de SMTP.'),'Mensagem do Sistema', MB_ICONERROR + 
Mb_Ok);
             StatusBar1.Panels[0].Text := 'Desconectado';
             StatusBar1.Refresh;
             parar := True ;
             exit;
          end;

          StatusBar1.Panels[0].Text := 'Conectado';
          StatusBar1.Refresh;

          gauProgresso.MaxValue := total ;

          StatusBar1.Panels[0].Text := 'Enviando as mensagens...';
          StatusBar1.Refresh;

          memEmpresa.First ;

          //Enviando os Emails para as Empresas Selecionadas
          try
               while not memEmpresa.Eof do
               begin
                    if memEmpresa.FieldByName('EMP_FLAG').AsBoolean 
then
                    begin
                         IdMsgSend.Recipients.EMailAddresses := 
memEmpresa.FieldByName('EMP_EMAIL').AsString;

                         try
                            //Limpa os arquivos atachados
                            IdMsgSend.MessageParts.Clear;

                            //Iniciando o Campo Mensagem Gerada
                            edMensagemGerada.Text := 
edMensagemModelo.Text ;

                            //Substituindo a Data
                            FindReplace('<data>', FormatDateTime
('dd',Date) + ' de ' + MesExtenso(Date) + ' de ' + FormatDateTime
('yyyy',Date) + '.', edMensagemGerada);

                            //Substituindo o campo Cliente
                            FindReplace('<cliente>', 
edNomeCliente.Text, edMensagemGerada);

                            //Substituindo a Assinatura
                            FindReplace('<assinatura>', 
edAssinatura.Text, edMensagemGerada);

                            //ATACHANDO O ARQUIVO COMO HTML
                            for i:= 1 to 2 do
                            begin
                                 with TIdText.Create
(IdMsgSend.MessageParts, edMensagemGerada.Lines) do
                                 begin
                                      ContentType := 'text/html';
                                 end;
                            end;

                            //ATACHANDO O CV
                            TIdAttachment.Create
(IdMsgSend.MessageParts, edCurriculo.Text );
                         except
                            Application.MessageBox('Ocorreu um erro 
ao atachar os arquivos','Mensagem do Sistema', MB_ICONERROR + Mb_Ok);
                            Break;
                            parar := True ;
                         end;

                         try
                            SMTP.Send(IdMsgSend);
                         except
                            Application.MessageBox(PChar('Ocorreu um 
erro ao enviar o e-mail para a Empresa ' + memEmpresa.FieldByName
('EMP_RAZAOSOCIAL').AsString ),'Mensagem do Sistema', MB_ICONERROR + 
Mb_Ok);
                            Break;
                            parar := True ;
                         end;

                         try
                            frmMenuPrincipal.qrContador.Active:= 
False;
                            frmMenuPrincipal.qrContador.SQL.Clear;
                            frmMenuPrincipal.qrContador.SQL.Add
('SELECT CONT_ULT_REGISTRO FROM ARQCONTADOR WHERE CONT_CODIGO 
= ''11''');
                            frmMenuPrincipal.qrContador.Active:= True;

                            codigo := 
frmMenuPrincipal.qrContador.FieldByName('CONT_ULT_REGISTRO').Value + 
1;

                            frmMenuPrincipal.qrContador.Active:= 
False;
                            frmMenuPrincipal.qrContador.SQL.Clear;
                            frmMenuPrincipal.qrContador.SQL.Add
('UPDATE ARQCONTADOR SET CONT_ULT_REGISTRO = '''+inttostr(codigo)+''' 
WHERE CONT_CODIGO = ''11''');
                            frmMenuPrincipal.qrContador.ExecSQL;

                            
spEncaminhamentos.StoredProcName:= 'MN_ARQENCAMINHAMENTOS';
                            spEncaminhamentos.ParamByName
('PAR_ENC_CODIGO').Value        := RetZero(IntToStr(codigo),6) ;
                            spEncaminhamentos.ParamByName
('PAR_ENC_DATA').Value          := Date ;
                            spEncaminhamentos.ParamByName
('PAR_ENC_OBS').Value           := 'Encaminhamento Automático' ;
                            spEncaminhamentos.ParamByName
('PAR_CLI_CODIGO').Value        := edCodigoCliente.Text ;
                            spEncaminhamentos.ParamByName
('PAR_VAG_CODIGO').Value        := 'AUTO' ;
                            spEncaminhamentos.ParamByName
('PAR_EMP_CODIGO').Value        := memEmpresa.FieldByName
('EMP_CODIGO').AsString;
                            spEncaminhamentos.ParamByName
('PAR_USU_TIMEUSUARIO').Value   := Now ;
                            spEncaminhamentos.ParamByName
('PAR_USU_CODIGO').Value        := frmMenuPrincipal.edCodigo.Text ;
                            spEncaminhamentos.ExecProc;
                            
                            
frmMenuPrincipal.IBTransaction.CommitRetaining;
                         except
                            Application.MessageBox(PChar('Ocorreu um 
erro ao Registrar Envio para a Empresa ' + memEmpresa.FieldByName
('EMP_RAZAOSOCIAL').AsString ),'Mensagem do Sistema', MB_ICONERROR + 
Mb_Ok);
                            Break;
                            parar := True ;
                         end;

                         if parar then
                         begin
                              Application.MessageBox(PChar('O 
processo de Envio foi cancelado.'),'Mensagem do Sistema', 
MB_ICONINFORMATION + Mb_Ok);
                              Break;
                         end;

                         contador:= contador + 1;
                    end;

                    gauProgresso.Progress := contador ;

                    memEmpresa.Next ;
               end
          finally
               parar := True ;

               StatusBar1.Panels[0].Text := 'Desconectando o 
servidor...';
               StatusBar1.Refresh;

               try
                   SMTP.Disconnect;
               except
                   Application.MessageBox(PChar('Ocorreu um erro ao 
desconectar o Servidor de SMTP.'),'Mensagem do Sistema', MB_ICONERROR 
+ Mb_Ok);
               end;

               StatusBar1.Panels[0].Text := 'Desconectado';
               StatusBar1.Refresh;

               Application.MessageBox(PChar('Foram enviados ' + 
inttostr(contador) + ' de ' + inttostr(total) + ' e-
mails.'),'Mensagem do Sistema', MB_ICONINFORMATION + Mb_Ok);

               memEmpresa.Close;
               gauProgresso.Progress := 0;

          end;
     end;

end;

procedure TfrmEncaminhamentosAuto.memEmpresaBeforeEdit(DataSet: 
TDataSet);
begin
     if not self.valida_email then exit ;

     if self.memEmpresa.FieldByName('EMP_EMAIL').AsString = '' then
     begin
          Application.MessageBox('A Empresa não possui e-mail 
cadastrado.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          abort ;
          exit;
     end;

     if not ValidaEmail(self.memEmpresa.FieldByName
('EMP_EMAIL').AsString) then
     begin
          Application.MessageBox('O e-mail cadastrado é inválido, 
favor verificar.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          abort ;
     end;
end;

procedure TfrmEncaminhamentosAuto.PesqArquivoClick(Sender: TObject);
begin
     OpenDialog.Title:= 'Abrir arquivo';
     OpenDialog.Filter:= 'Arquivos do Word|*.doc|RTF|*.rtf|Todos os 
arquivos|*.*';
     if self.OpenDialog.Execute then
        self.edCurriculo.Text := self.OpenDialog.FileName ;
end;

procedure TfrmEncaminhamentosAuto.edCurriculoKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
     If Key = 120 Then
     Begin
          Self.PesqArquivoClick( Sender );
     End;
end;

procedure TfrmEncaminhamentosAuto.edCurriculoExit(Sender: TObject);
begin
     self.edCurriculo.Text := Trim(self.edCurriculo.Text) ;

     If not(fileexists(self.edCurriculo.Text)) then
     begin
          Application.MessageBox('O arquivo informado não 
existe.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          self.edCurriculo.SetFocus ;
          Exit ;
     end;
end;

procedure TfrmEncaminhamentosAuto.FormShow(Sender: TObject);
begin
     self.qrTemp.Close ;
     self.qrTemp.SQL.Clear ;
     self.qrTemp.SQL.Add('SELECT COE_HEADHUNTER AS HEADHUNTER, 
COE_EMAIL FROM ARQCONTROLE_EMAILS');
     self.qrTemp.SQL.Add('ORDER BY COE_HEADHUNTER');

     self.qrTemp.Open;
     self.qrTemp.First;
     self.edHeadHunter.Items.Clear;
     while not self.qrTemp.Eof do
     begin
          self.edHeadHunter.Items.Add(uppercase
(self.qrTemp.FieldByName('HEADHUNTER').AsString) + '<' + 
self.qrTemp.FieldByName('COE_EMAIL').AsString + '>') ;
          self.qrTemp.Next;
     end;
end;

procedure TfrmEncaminhamentosAuto.edHeadHunterExit(Sender: TObject);
begin
     //Valida o Combo
     ValidaCombo( Sender );
end;

procedure TfrmEncaminhamentosAuto.edHeadHunterChange(Sender: TObject);
begin
     self.qrTemp.Close ;
     self.qrTemp.SQL.Clear ;
     self.qrTemp.SQL.Add('SELECT * FROM ARQCONTROLE_EMAILS');
     self.qrTemp.SQL.Add('WHERE COE_EMAIL = ' + QuotedStr(Trim
(MidString2(Copy(self.edHeadHunter.Text, 1, length
(self.edHeadHunter.Text)-1), '<'))));
     self.qrTemp.Open;

     self.edEmail.Text      := self.qrTemp.FieldByName
('COE_EMAIL').AsString ;
     self.edSenha.Text      := self.qrTemp.FieldByName
('COE_SENHA').AsString ;
     self.edAssinatura.Text := self.qrTemp.FieldByName
('COE_ASSINATURA').AsString ;
end;

procedure TfrmEncaminhamentosAuto.cbIncluirClick(Sender: TObject);
begin
     if self.memEmpresa.RecordCount > 0 then
        self.btnPesquisarClick(sender);
end;

constructor TThreadEmail.Create;
begin
     inherited Create(false);
end;

procedure TThreadEmail.Execute;
begin
     Self.Priority := tpLowest;

     with frmEncaminhamentosAuto do
     begin
          while not parar do
          begin
               Synchronize(EnviaEmail);
          end;
     end;
end;

procedure TfrmEncaminhamentosAuto.btnCancelarClick(Sender: TObject);
begin
     parar := True ;
end;

procedure TfrmEncaminhamentosAuto.btnEnviarClick(Sender: TObject);
begin
     if edCodigoCliente.Text = '' then
     begin
          Application.MessageBox('Favor selecionar um 
Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          edCodigoCliente.SetFocus ;
          Exit ;
     end;

     if edCurriculo.Text = '' then
     begin
          Application.MessageBox('Favor selecionar o Currículo do 
Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          edCurriculo.SetFocus ;
          Exit ;
     end;

     if edHeadHunter.Text = '' then
     begin
          Application.MessageBox('Favor selecionar o(a) 
HeadHunter.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK);
          edHeadHunter.SetFocus ;
          Exit ;
     end;

     if memEmpresa.RecordCount = 0 then
     begin
          Application.MessageBox('É necessário fazer antes uma 
Pesquisa de Empresas.','Mensagem do 
Sistema',MB_ICONEXCLAMATION+MB_OK);
          edCodigoCliente.SetFocus ;
          Exit ;
     end;

     parar := False;
     TThreadEmail.Create;
end;

end.


--- Em delphi-br@yahoogrupos.com.br, "Jorge Ericsson Silva Pinheiro" 
<[EMAIL PROTECTED]> escreveu
> Marcelo,
> 
> Vc poderia usar uma Thread para controla tudo isso, crie um 
formulário baseado no Thread, coloque todos os controles de seu envio 
e pronto.
> Ao executar sua rotina, vc poderá efetuar outros procedimento no 
seu formulário.
> 
> Espero ter lhe ajudado,





-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a