Delphi 如何减少使用Synapse TMIMemesss解码MIME时使用的巨大RAM?

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

我使用TMimeMess对基于SMTP服务器的传入电子邮件进行解码 在突触上

我发现,对于50MB MIME消息的解码(带有 附件),TMimeMess使用了600-800MB的内存

此处解码代码:

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,这应该是答案,否?