【发布时间】:2015-07-21 09:35:21
【问题描述】:
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)
所以下面的代码可以工作,但是一旦发送电子邮件出现问题并引发异常,服务就会停止。有没有办法让它继续并通过所有队列?即使有错误的消息。例如,当“我附加”一个不存在的文件时,会停止我的服务。
【问题讨论】:
-
你为什么要吞下所有的异常?
-
@DavidHeffernan 不确定你的意思..
-
因为我的一些邮件在发送时有可能出现问题,我正在尝试不锁定一些邮件的发送,因为无法发送1或2。
-
为什么要捕获所有个异常?