6

次の設定で gmail アカウント (Delphi 7、Indy 10) を使用して電子メールを送信しようとしています。

TIdSmtp:

Port = 587;
UseTLS := utUseExplicitTLS;

TIdSSLIOHandlerSocketOpenSSL:

SSLOptions.Method := sslvTLSv1;

すべてが正常に設定されているようです。私はこの応答を受け取ります:

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;

そして、ハングして終了しません。電子メールは送信されません。何が問題になる可能性がありますか?

4

4 に答える 4

4

はい、私は indy10 と tls (通常は gmail) で多くの問題を見てきました。

最初に、ここから最新の ssl ライブラリがあることを確認してください

indy の最先端バージョン (つまり、非安定リリース) で解決された断続的なストールとエラーを見てきました。http://www.indyproject.org/sockets/download/svn.DE.aspxを参照してください

Gmail の場合、私は通常、ポート 465 で ImplicityTLS を使用します。

  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;
于 2010-01-28T02:51:20.047 に答える
3

問題は簡単でした。私は十分に我慢できず、アプリケーションはハングしませんでした。長いタイムアウトがありました。タイムアウトは間違った設定の結果でした。

于 2010-03-17T13:18:29.757 に答える
1

Indy をテストするときは、[Delphi 例外で停止] がチェックされていることを確認する必要があります (ツール、デバッガ オプション、言語例外)。

一部のルーチン、特に idSMTP.Send は例外を「食べる」(または隠す) ため、ハングアップします。

于 2010-07-24T02:03:51.910 に答える
1

まず、コードが他の電子メール サーバーで動作していることを確認しましたか?

少し前に、Indy TIdHTTP コンポーネントで http リクエストを受け入れる特定のサーバーに問題があると誰かが言いました。その理由は、ユーザーエージェントの一部として Indy が含まれていたためです。

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

彼らがIndy Libraryを削除したとき、それは機能しました。明らかに、Indy で作成された悪意のある Web サービスがいくつかあるため、Indy で作成されたアプリケーションからの接続を拒否するサイトもあります。

使用しているコンポーネントに UserAgent プロパティがあるかどうかはわかりません。しかし、そうである場合は、Indy への参照を無効にします。

于 2010-01-27T15:56:53.210 に答える