8

D7 +Indy10の最新ビルドを使用します。

私のコードはTIdSMTPを使用してメールを送信しています。一部のエンドユーザーで「接続が正常に閉じられました」と表示され続け、メールが送信されません。

コードは次のようなものです。

try
~~~~
~~~~
_idSMTP := TIdSmtp.Create;
with _idSMTP do
begin
  Host := 'myhost';
  Connect;
  try
    Send(_EmailMsg);
    Result := True;
  except
    on E: Exception do
    begin
      MsgDlgErr(Self.Handle, E.Message)
    end
  end;
end;
finally
 _idSMTP.Disconnect;
 _idSMTP.Free;
end;

何かアドバイス?

4

4 に答える 4

21

http://www.swissdelphicenter.ch/en/showarticle.php?id=1でそれについてすべて読んでください

EIdConnClosedGracefullyは、接続が反対側によって意図的に閉じられたことを通知する例外です。これは、接続リセットエラーを引き起こす接続の切断と同じではありません。反対側が接続を閉じ、ソケットの読み取りまたは書き込みが行われると、EIdConnClosedGracefullyがIndyによって発生します。これは、知らないうちに閉じられたファイルの読み取りまたは書き込みを試みることに似ています。

場合によっては、これは真の例外であり、コードで処理する必要があります。その他の場合(通常はサーバー)、これはプロトコルの機能の正常な部分であり、Indyがこの例外を処理します。Indyがそれをキャッチしても、IDEで実行すると、デバッガーが最初にトリガーされます。F9キーを押すだけで続行でき、Indyが例外を処理しますが、デバッグ中に絶えず停止するのは非常に煩わしい場合があります。Indyが例外をキャッチした場合、IDEから実行されない限り、ユーザーにプログラムの例外が表示されることはありません。

于 2009-07-06T08:17:58.707 に答える
2

私の場合、smtp サーバーでホストされているものとは異なるドメインからの送信者の電子メール アドレスを使用したためにエラーが発生しました。これが、smtp サーバーが接続を拒否した理由です。

于 2013-06-13T12:38:32.150 に答える
1

私の経験では、AT&T サーバーの場合@att.netMAIL FROM. 詳細は、エラーをTIdLogEvent受信したユーザーを使用してエラーをログに記録することで判断できます。それ以外の場合、エラー レポートはかなりあいまいです - 直後に切断 (接続が正常に閉じられた) が発生した場合MAIL FROMは、サーバー ポリシーがドメインの電子メールを拒否していることを示している可能性があります。トニも説明しているように、ホストしていません。

それ以外の場合、「接続は正​​常に閉じられました」というエラーは、ピアによって意図的に閉じられたソケットへの読み取り/書き込みが試みられていることを意味します。この場合、ピアは接続先の SMTP サーバーです。これは、接続が切断されたことを示す「接続のリセット」エラーとは異なります。どちらの場合も、接続が存在しなくなり、読み取り/書き込みができなくなります。

于 2014-01-28T02:06:14.213 に答える
0

OpenSSL ライブラリがクライアント サイトにインストールされていない場合に、このエラーが発生しました。

于 2021-09-07T08:19:53.270 に答える