Question

Je suis en train d'envoyer un e-mail en utilisant le compte gmail (Delphi 7, Indy 10) avec ces paramètres:

TIdSmtp:

Port = 587;
UseTLS := utUseExplicitTLS;

TIdSSLIOHandlerSocketOpenSSL:

SSLOptions.Method := sslvTLSv1;

Tout semble être mis ok. Je reçois cette réponse:

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;

Et puis il se bloque et ne se termine pas. E-mail n'est pas envoyé. Que peut-être le problème?

Était-ce utile?

La solution 2

Le problème était simple. Je n'étais pas assez patient et l'application ne suspendez pas, il y avait longtemps délai d'attente. Le délai d'attente était résultat de mauvais réglages.

Autres conseils

Oui, je l'ai vu beaucoup de problèmes avec Indy10 et tls (généralement gmail).

d'abord vous assurer que vous avez les dernières bibliothèques ssl d'ici

J'ai vu des stalles intermittentes et des erreurs qui ont été résolus dans la version de pointe de la indy (ie. Un dégagement non stable). voir http://www.indyproject.org/sockets/download/svn.DE .aspx

pour gmail, j'utilise généralement implicityTLS sur le port 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;

Tout d'abord, avez-vous vérifié le code fonctionne avec d'autres serveurs de messagerie?

Il y a quelque temps quelqu'un a dit qu'ils avaient des problèmes avec certains serveurs acceptant des requêtes http avec le composant Indy TIdHTTP. La raison en était qu'ils avaient Indy inclus dans le cadre du useragent:

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

Quand ils ont enlevé Indy Library il a travaillé. De toute évidence, il y a eu quelques services Web malins créés avec Indy, de sorte que certains sites refuseront les connexions à partir d'applications créées avec.

Je ne sais pas si le composant que vous utilisez a toute sorte de propriété UserAgent. Mais si elle le fait, null sur toutes les références à Indy.

Lors du test Indy, vous devez être sûr que « Stop sur les exceptions Delphi » est cochée (Outils, Options, Debugger Exceptions linguistiques).

Certaines routines, en particulier idSMTP.Send, « » (ou eats cache) exceptions résultant dans un raccrochent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top