【发布时间】:2018-03-13 01:35:00
【问题描述】:
我正在尝试阅读和处理由 Thunderebird 创建的电子邮件文件。我正在使用TIdMessage。它适用于绝大多数电子邮件,但有日期问题的邮件除外。
这是我的代码:
procedure TForm1.ButtonTestClick(Sender: TObject);
const
CRLF = #13#10;
var
IndyStringList: TStringList;
IndyStream: TMemoryStream;
IdMessage1: TIdMessage;
begin
IdMessage1 := TIdMessage.Create(nil);
s1 := 'C:\Temp\MboxTest4.txt'; // shortened problem file
IndyStringList := TStringList.Create;
IndyStream := TMemoryStream.Create;
IndyStringList.LoadFromFile(s1);
IndyStringList.Add(CRLF + '.' + CRLF);
IndyStringList.SaveToStream(IndyStream);
IndyStream.Position := 0;
try
IdMessage1.LoadFromStream(IndyStream);
except
on E: EConvertError do
ShowMessage(E.ClassName + ' ' + E.Message);
on E : Exception do
ShowMessage(E.ClassName+' error raised, with message : ' + E.Message);
end;
end;
当我使用包含错误 Date 的文件运行此程序时,EConvertError 和 Exception 处理程序不会执行,并且程序会继续运行,就好像没有错误一样。
这是电子邮件:
从 - 1965 年 1 月 1 日星期一 00:00:00 X-Persona:【问题讨论】:
-
您能解释一下为什么您希望引发异常吗?让我们从库按设计运行的假设开始。
-
如果它的设计假设所有电子邮件的格式都无可挑剔,那么我们就不需要错误处理。我想知道是不是这样?如果 TidMessage 设计为在数据不完美时失败,有什么建议可以替代 TidMessage?
-
这类问题属于推荐问题,不在此列。我认为您需要研究您正在使用的 Indy 库的代码,以确定它是如何工作的。我认为您不能期望这会被记录在案。
-
谢谢你。我不是一个好的程序员,你的建议超出了我的能力。这就是我在这里的原因。 :-)
-
@DavidHeffernan 仅供参考,AtoZed 为 CrossTalk、IntraWeb 和 Indy 创建了一个新的网络论坛:atozed.com/forums