2012-12-20 24 views
10

Tôi sử dụng TMimeMess để giải mã e-mail đến của máy chủ SMTP dựa trên trên Synapse.Làm thế nào để giảm dung lượng RAM lớn khi giải mã MIME bằng cách sử dụng Synapse TMimeMess?

Tôi phát hiện ra rằng để giải mã tin nhắn MIME 50MB (văn bản đơn giản với tệp đính kèm), TMimeMess đã sử dụng 600-800MB bộ nhớ.

giải mã mã ở đây:

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; 

Cảm ơn.

+1

Bạn đã liên hệ với tác giả Synpse về vấn đề này chưa? –

+0

Tôi đã đăng tin nhắn này lên đồng bộ công cộng, nhưng không ai trả lời. – krtl

+0

có thể sử dụng bộ giải mã indy MIME thay thế không? – krtl

Trả lời

0

Indy có các thành phần TIdSMTP và TIdMessage cho mục đích này. Họ giải mã dữ liệu SMTP động khi nó đang được tải xuống từ máy chủ, dữ liệu không được lưu trước trong bộ nhớ và các tệp đính kèm được lưu trữ trong các tệp tạm thời trên HDD theo mặc định.

Bạn cũng có thể thử và liên hệ với tác giả Synpse về điều này qua địa chỉ email hoặc trang web của họ.