Delphi 如何减少使用Synapse TMIMemesss解码MIME时使用的巨大RAM?
我使用TMimeMess对基于SMTP服务器的传入电子邮件进行解码 在突触上 我发现,对于50MB MIME消息的解码(带有 附件),TMimeMess使用了600-800MB的内存 此处解码代码:Delphi 如何减少使用Synapse TMIMemesss解码MIME时使用的巨大RAM?,delphi,memory,smtp,mime,Delphi,Memory,Smtp,Mime,我使用TMimeMess对基于SMTP服务器的传入电子邮件进行解码 在突触上 我发现,对于50MB MIME消息的解码(带有 附件),TMimeMess使用了600-800MB的内存 此处解码代码: FMimeMsg.Header.DecodeHeaders(FMimeMsg.MessagePart.Lines); FMimeMsg.MessagePart.DecomposeParts; ExtractPartsFromMess(FMimeMsg.MessagePart); ... proced
FMimeMsg.Header.DecodeHeaders(FMimeMsg.MessagePart.Lines);
FMimeMsg.MessagePart.DecomposeParts;
ExtractPartsFromMess(FMimeMsg.MessagePart);
...
procedure ExtractPartsFromMess(AMimePart: TMimePart);
var i: integer;
begin
if AMimePart.GetSubPartCount = 0 then
Begin
if (AMimePart.PrimaryCode = MP_TEXT) then
Begin
AMimePart.DecodePart;
FBody.Add(string(ReadStrFromStream(AMimePart.DecodedLines,AMimePart.DecodedLines.Size)));
end
else if (AMimePart.PrimaryCode = MP_BINARY) then
Begin
if AMimePart.FileName <> '' then
Begin
AMimePart.DecodePart;
AMimePart.DecodedLines.SaveToFile(FPathToIncomingFolder+AMimePart.FileName);
end;
end;
end
else
Begin
for i:=0 to AMimePart.GetSubPartCount-1 do
Begin
ExtractPartsFromMess(AMimePart.GetSubPart(i));
end;
end;
end;
FMimeMsg.Header.DecodeHeaders(FMimeMsg.MessagePart.Lines);
FMimeMsg.MessagePart.DecomposeParts;
ExtractPartsFromMess(FMimeMsg.MessagePart);
...
从MESS中提取程序部件(AMimePart:TMimePart);
varⅠ:整数;
开始
如果AMimePart.GetSubPartCount=0,则
开始
如果(AMimePart.PrimaryCode=MP_TEXT),则
开始
AMimePart.DecodePart;
添加(字符串(ReadStrFromStream(AMimePart.DecodedLines,AMimePart.DecodedLines.Size));
结束
否则如果(AMimePart.PrimaryCode=MP_BINARY),则
开始
如果AMimePart.FileName为“”,则
开始
AMimePart.DecodePart;
AMimePart.DecodedLines.SaveToFile(FPathToIncomingFolder+AMimePart.FileName);
结束;
结束;
结束
其他的
开始
对于i:=0到AMimePart.GetSubPartCount-1 do
开始
从MESS中提取零件(AMimePart.Get子部分(i));
结束;
结束;
结束;
谢谢。Indy有用于此目的的TIdSMTP和TIdMessage组件。它们在SMTP数据从服务器下载时动态解码,数据不会预缓存在内存中,默认情况下附件存储在硬盘上的临时文件中
您也可以尝试通过其电子邮件地址或网站联系Synpse作者。您是否就此问题联系了Synpse作者?我已将此消息发布给synalist public,但没有人回答。是否可以改用indy MIME解码器?是的。Indy有用于此目的的
tidstp
和TIdMessage
组件。它们在SMTP数据从服务器下载时动态解码,数据未预缓存在内存中,默认情况下附件存储在硬盘上的临时文件中。@RemyLebeau,这应该是答案,否?