1

クライアントが SMTP サーバーに接続しようとしています。SMTP クライアントにリンクされた OnStatus イベントがあり、

解決中 / 接続中 / 接続中の状態。ただし、接続しようとするとハングアップ/アプリケーションがフリーズすることがあります。ただし、Connected 状態が OnStatus から発生していることがわかります。問題は何でしょうか。ここに示すように、smtp の ConnectTimeout と Readtimeout の両方の設定で解決中の DNS を除外しました。

  smtp.OnStatus := SMTPStatus;
  smtp.ConnectTimeout := 10000;
  smtp.ReadTimeout := 10000;
  smtp.Connect;
  // SOMETIMES MY LOG DOES NOT GET HERE Log('AfterConnect');
  if smtp.Connected then
  begin
    smtp.Send(Mess);
    smtp.Disconnect;
  end

約 600KB の添付ファイルでは、添付ファイル部分のエンコードでスタックしているようで、完了しません。現在、エンコード タイプはデフォルトのものです。

10/3/2012 10:21:43 AM  Status: Resolving hostname XXXXXXXXXX.com.
10/3/2012 10:21:43 AM  Status: Connecting to 10.5.2.171.
10/3/2012 10:21:44 AM  Status: Connected.
10/3/2012 10:21:45 AM  Status: Encoding text
10/3/2012 10:21:45 AM  Status: Encoding attachment
4

2 に答える 2

2

OnStatusイベントが報告されている場合hsConnectedは、サーバーに物理的に接続されています。Connect()がその後終了しない場合は、サーバーの最初のグリーティングなど、サーバーからのデータが到着しないのを待ってブロックされている可能性があります。ただし、そのReadTimeout可能性を処理する必要があります (OnConnectedつまり、デッドロックになりつつあるイベント ハンドラーが割り当てられている場合を除きます)。Wireshark などのパケット スニファーを使用して、予期したサーバーに実際に接続していること、および予期した正しい種類のグリーティング データを送信していることを確認しますTIdSMTP

于 2012-09-24T20:20:34.777 に答える
1

多くの SMTP サーバーは、最初の挨拶メッセージを 30 秒ほど遅らせてスパムを抑止するように構成されています。また、ほとんどのサーバーは、指定された時間内に複数回接続を試みた場合、同じ IP アドレスからの接続を拒否するように構成できます (通常は 1 分)。これが問題を引き起こしている可能性があります。

于 2012-09-27T13:08:27.200 に答える