Domanda

Sto cercando di inviare una e-mail utilizzando account gmail (Delphi 7, Indy 10) con queste impostazioni:

TIdSmtp:

Port = 587;
UseTLS := utUseExplicitTLS;

TIdSSLIOHandlerSocketOpenSSL:

SSLOptions.Method := sslvTLSv1;

Tutto sembra essere impostato su OK. Ottengo questa risposta:

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 poi si blocca e non viene completata. E-mail non verrà inviata. Quale può essere il problema?

È stato utile?

Soluzione 2

Il problema era semplice. Non ero abbastanza paziente e l'applicazione non appendere, non c'era tempo di timeout. Il timeout è risultato di impostazioni errate.

Altri suggerimenti

un sacco di sì, che ho visto di problemi con indy10 e TLS (generalmente gmail).

prima assicurarsi di avere le ultime librerie ssl da qui

ho visto bancarelle intermittenti e gli errori che sono stati risolti nella versione sanguinamento bordo della Indy (es. Una release non stabile). vedi http://www.indyproject.org/sockets/download/svn.DE aspx

per gmail, io di solito uso implicityTLS sulla 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;

Prima di tutto, avete verificato il codice sta lavorando con altri server di posta elettronica?

Qualche tempo fa qualcuno ha detto che stavano avendo problemi con alcuni server di accettare le richieste HTTP con il componente Indy TIdHTTP. Il motivo era che avevano Indy incluso come parte del useragent:

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

Quando hanno tolto Indy biblioteca ha funzionato. Evidentemente ci sono stati alcuni servizi web maligni creati con Indy, quindi alcuni siti si rifiuterà le connessioni da applicazioni create con esso.

Non sono sicuro se il componente si utilizza ha alcun tipo di proprietà UserAgent. Ma se lo fa, null eventuali riferimenti a Indy.

Durante il test di Indy, si dovrebbe essere sicuri che “Stop su Eccezioni Delphi” è selezionata (Strumenti, Opzioni Debugger, Eccezioni lingua).

Alcune routine, in particolare idSMTP.Send, ‘mangia’ (o nasconde) eccezioni con conseguente riagganciare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top