Delphi Try except停止服务执行
因此,下面的代码可以工作,但一旦发送电子邮件出现问题并引发异常,服务就会停止。我有没有办法让它继续下去,穿过所有的队列?即使有错误的消息。例如,停止我的服务的错误是“我附加”一个不存在的文件。您说您已经确认进入了finally部分。因此有3种可能性:Delphi Try except停止服务执行,delphi,try-catch,indy,Delphi,Try Catch,Indy,因此,下面的代码可以工作,但一旦发送电子邮件出现问题并引发异常,服务就会停止。我有没有办法让它继续下去,穿过所有的队列?即使有错误的消息。例如,停止我的服务的错误是“我附加”一个不存在的文件。您说您已经确认进入了finally部分。因此有3种可能性: finally部分中的一行代码阻止代码继续 另一个异常在finally部分中提出 当您进入finally部分时,您已经处于“异常状态”。因此,离开finally将带您进入调用堆栈中的下一个finally/except部分 您必须添加调试日志来确认这
- 您的
实例无效,您的吞咽器发现访问冲突。当您再次尝试使用邮件
中的except部分时,您会遇到另一个访问冲突Mail
中的某些内容会触发自身的异常MarkMailExecution
- (我假设您的日志记录机制没有失败,因为您已经从中获得了一些信息。)
List := FQueue.LockList;
for I := 0 to List.Count - 1 do
begin
Mail := TIdMessageTaskman(List[I]);
FEventLogger.LogMessage( 'Mail' + Mail.ToString, EVENTLOG_INFORMATION_TYPE , 0, 2);
try
try
FidSmtp.Connect();
FidSmtp.Send(Mail);
except
on e: exception do
begin
FEventLogger.LogMessage('Error sending mail ' + e.ClassName + ', ' +
e.Message, EVENTLOG_ERROR_TYPE, 0, 2);
MarkMailExecution(Mail.TaskID, Mail.NotificationID, False, e.Message);
Continue;
end;
end;
finally
begin
if FidSmtp.Connected then
FidSmtp.Disconnect;
end;
end;
FEventLogger.LogMessage( 'after finally', EVENTLOG_INFORMATION_TYPE , 0, 2);
MarkMailExecution(Mail.TaskID, Mail.NotificationID, True, '');
FreeAndNil(Mail)