2012-12-20 34 views
10

मैं अपने एसएमटीपी सर्वर के आने वाले ई-मेल को पर Synapse पर आने वाले ई-मेल को डीकोड करने के लिए TMimeMess का उपयोग करता हूं।Synapse TMimeMess का उपयोग करके एमआईएम डीकोडिंग पर भारी रैम उपयोग को कैसे कम करें?

मुझे पता चला कि 50 एमबी एमआईएम संदेश ( संलग्नक के साथ सरल पाठ) को डीकोड करने के लिए, टीएमआईएममेस ने 600-800 एमबी मेमोरी का इस्तेमाल किया था।

डिकोडिंग यहाँ कोड:

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; 

धन्यवाद।

+1

क्या आपने इस मुद्दे के बारे में Synpse लेखकों से संपर्क किया है? –

+0

मैंने इस संदेश को synalist-public में पोस्ट किया है, लेकिन किसी ने जवाब नहीं दिया। – krtl

+0

इसके बजाय इंडी एमआईएम डीकोडर का उपयोग करना संभव है? – krtl

उत्तर

0

इंडी के पास इस उद्देश्य के लिए TIdSMTP और TIdMessage घटक हैं। वे एसएमटीपी डेटा को गतिशील रूप से डीकोड करते हैं क्योंकि इसे सर्वर से डाउनलोड किया जा रहा है, डेटा मेमोरी में प्री-कैश नहीं किया गया है, और डिफ़ॉल्ट रूप से एचडीडी पर अस्थायी फ़ाइलों में संलग्नक संग्रहीत किए जाते हैं।

आप इस बारे में सिन्स लेखकों को उनके ईमेल पते या वेबसाइट के माध्यम से भी आजमा सकते हैं और संपर्क कर सकते हैं।