Como usar vários SMTP no INDY-D7???

Delphi

07/07/2005

Gostaria de saber como fazer para q quando o programa tenta-se enviar por um SMTP ele detectasse que o SMTP1 caiu e passar pro SMTP2....


O4pr3ndiz

O4pr3ndiz

Curtidas 0

Respostas

Massuda

Massuda

07/07/2005

Faça algo mais ou menos assim:
...
const
  SERVIDOR_SMTP: array[0..2] of string = (
    ´smtp0.example.com´,
    ´smtp1.example.com´,
    ´smtp2.example.com´
    );
var
  I: Integer;
....
  while not IdSMTP1.Connected do begin
    for I := Low(SERVIDOR_SMTP) to High(SERVIDOR_SMTP) do begin
      IdSMTP1.Host :=SERVIDOR_SMTP[I];
      IdSMTP1.AuthenticationType := ...
      IdSMTP1.Username := ...
      IdSMTP1.Password := ...
      try
        IdSMTP1.Connect;
        Break; // conectou, pára o loop
      except
        if I = High(SERVIDOR_SMTP) then begin
          // não tem mais servidores, passa a exceção para frente
          raise;
        end;
      end;
    end;
  end;

  try
    ...
    IdSMTP1.Send(...);
    ...
  finally
    IdSMTP1.Disconnect;
  end;
...



GOSTEI 0
O4pr3ndiz

O4pr3ndiz

07/07/2005

Agradeço a força mas este codigo so permite um nome de usuário e senha...
E mesmo q eu crie o usuario user2005 e a senha 123456 em 3 servers smpt diferentes ele so funcionou no smtp.mail.yahoo.com.br, no smtps.uol.com.br e smtp.bol.com.br naum..


:(


GOSTEI 0
Massuda

Massuda

07/07/2005

Agradeço a força mas este codigo so permite um nome de usuário e senha...
O código postado mostra como detectar que a conexão falhou e tentar outro servidor. Para administrar os diferentes usuários associados a cada servidor use uma tabela de BD ou uma estrutura de dados adequada. Já os detalhes de conexão (precisar ou não autenticação, conectar com o POP3, etc) já foi discutido no fórum em outros tópicos.


GOSTEI 0
O4pr3ndiz

O4pr3ndiz

07/07/2005

estou muito precisando disto.. Obrigado..


GOSTEI 0
Christian_adriano

Christian_adriano

07/07/2005

Olá Colega o4pr3ndiz,

Vc pode usar de vetores, uma para os SMTPs , PASWORDs, LOGINs:

Ficaria mais ou menos assim:

... 
const 
  SERVIDOR_SMTP: array[0..2] of string = ( 
    ´smtp0.example.com´, 
    ´smtp1.example.com´, 
    ´smtp2.example.com´ 
    ); 
  PASSWORDs: array[0..2] of string = ( 
    ´12345´, 
    ´864596´, 
    ´7845455xy´ 
    ); 
  LOGINs: array[0..2] of string = ( 
    ´login1´, 
    ´login2´, 
    ´login3´ 
    ); 
var 
  I: Integer; 
.... 
  while not(IdSMTP1.Connected) do begin 
    for I := Low(SERVIDOR_SMTP) to High(SERVIDOR_SMTP) do begin 
      IdSMTP1.Host :=SERVIDOR_SMTP[I]; 
      IdSMTP1.AuthenticationType := ... 
      IdSMTP1.Username := LOGINs[I];
      IdSMTP1.Password := PASSWORDs[I];
      try 
        IdSMTP1.Connect; 
        Break; // conectou, para o loop 
      except 
        if I = High(SERVIDOR_SMTP) then begin 
          // não tem mais servidores, passa a exceção para frente 
          raise; 
        end; 
      end; 
    end; 
  end; 

  try 
    ... 
    IdSMTP1.Send(...); 
    ... 
  finally 
    IdSMTP1.Disconnect; 
  end; 
...



Espero que ajude.

[]´s.

Christian.[/code]


GOSTEI 0
POSTAR