現在、Delphi で電子メールを送信するために Ararat Synapse をテストしています。
ローカル関数は TSMTPSend を作成し、電子メールを送信します。
この操作を中止するにはどうすればよいですか?
SMTP.Sock.OnStatus に割り当てられたコールバック関数を設定して、ステータス出力を実行しました。
送信の進行を中止したい場合、コールバック関数内で TSMTPSend の TTCPBlockSocket を使用できると考えました。この関数では TSMTPSend に直接アクセスできないためです。
私がやりたかったことは基本的に次のように見えます
MyCallBack(Sender: TObject; Reason: THookSocketReason; const Value: string);
begin
if FCancelWasClicked then
begin
if Sender is TTCPBlockSocket then
TTCPBlockSocket(Sender).StopFlag := True;
// or TTCPBlockSocket(Sender).AbortSocket or CloseSocket
end;
end;
しかし、StopFlag は効果を示さず、AbortSocket/CloseSocket は StackOverFlow につながります。これは、ソケットが HR_CloseSocket メッセージを無限にポンピングするためです。
私はそれを間違っていますか?他のオプションはありますか?