Pergunta

Estou tentando enviar um e-mail usando a conta do Gmail (Delphi 7, Indy 10) com estas configurações:

Tidsmtp:

Port = 587;
UseTLS := utUseExplicitTLS;

TidsslioHandlersockonssl:

SSLOptions.Method := sslvTLSv1;

Tudo parece estar bem definido. Eu recebo esta resposta:

Resolving hostname smtp.gmail.com.
Connecting to 74.125.77.109.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
; bits = 128; version = TLSv1/SSLv3;

E então pendura e não termina. E-mail não é enviado. Qual pode ser o problema?

Foi útil?

Solução 2

O problema era simples. Eu não fui paciente o suficiente e a aplicação não pendurou, houve um tempo limite longo. O tempo limite foi resultado de configurações erradas.

Outras dicas

Sim, eu já vi muitos problemas com o Indy10 e o TLS (geralmente o Gmail).

Primeiro, verifique se você tem as mais recentes bibliotecas SSL daqui

Vi barracas e erros intermitentes que foram resolvidos na versão de borda sangrenta do Indy (ou seja, uma versão não estável). Vejo http://www.indyproject.org/sockets/download/svn.de.aspx

Para o Gmail, geralmente uso implícito na porta 465 ..

  idSmtp := TIdSMTP.Create(nil);
  try
    idSmtp.IOHandler := nil;
    idSmtp.ManagedIOHandler := true;

    // try to use SSL
    try
      TIdSSLContext.Create.Free;
      idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp);
      if (smtpSettings.port = 465) then
        idSmtp.UseTLS := utUseImplicitTLS
      else
        idSmtp.UseTLS := utUseExplicitTLS;
    except
      idSmtp.IOHandler.Free;
      idSmtp.IOHandler := nil;
    end;

    if (idSmtp.IOHandler = nil) then
    begin
      idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp);
      idSmtp.UseTLS := utNoTLSSupport;
    end;

    // send message, etc

  finally
    idSmtp.Free;
  end;

Primeiro, você verificou que o código está trabalhando com outros servidores de e -mail?

Há algum tempo, alguém mencionou que estava tendo problemas com certos servidores que aceitam solicitações HTTP com o componente Indy Tidhttp. O motivo era que eles incluíram Indy como parte do usuáriogent:

      Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';

Quando eles removeram Biblioteca Indy funcionou. Evidentemente, houve alguns serviços da Web malignos criados com a Indy, para que alguns sites recusem conexões de aplicativos criados com ele.

Não tenho certeza se o componente que você está usando possui algum tipo de propriedade do usuário. Mas, se isso acontecer, anule alguma referência a Indy.

Ao testar a Indy, você deve ter certeza de que “Pare nas exceções Delphi” é verificado (ferramentas, opções de depurador, exceções de idiomas).

Algumas rotinas, especificamente idsmtp.send, 'come' (ou oculta) exceções, resultando em um desligamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top