目前我正在使用Ararat Synapse测试Delphi发送电子邮件。
一个本地函数创建了一个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会导致堆栈溢出,因为套接字将无休止地泵送HR_CloseSocket消息。我做错了吗?还有其他选项吗?