मैं व्यक्तिगत उपयोग-केवल एप्लिकेशन में अनुलग्नक के साथ एक ईमेल संदेश बनाने और भेजने के लिए डेल्फी 2006 का उपयोग कर रहा हूं। मैं संदेश को TIdSMTP के उदाहरण के साथ भेजता हूं, और फिर एक प्रतिलिपि को एक विशिष्ट IMAP फ़ोल्डर में TIdIMAP4 के उदाहरण के साथ भी डालता हूं। यह सब इंडी 10 के संस्करण के साथ बहुत अच्छी तरह से काम करता है जिसे एक अपवाद के साथ बीडीएस2006 के साथ वितरित किया गया था: ईमेल हेडर में समय हमेशा गलत होता है।मल्टीपार्ट/मिश्रित संदेश में गलत सीमा स्ट्रिंग
मैंने यह तय करने का फैसला किया कि यदि मैं कर सकता हूं, और समाधान खोजने के बाद यह नवीनतम इंडी 10 स्नैपशॉट प्राप्त करने और इसका उपयोग करने के लिए सबसे उचित लग रहा था।
जो ईमेल हेडर में सही समय डालता है, लेकिन एक नई समस्या है। सीमा स्ट्रिंग अब संदेश के शीर्षलेख में अलग है जो ईमेल के बॉडी में आने वाले आईएमएपी फ़ोल्डर में जोड़ा जाता है! (कृपया ध्यान दें कि संदेश यह है कि SMTP के माध्यम से भेजा गया था सही है।)
इस इंडी 10 में पुराने संस्करण से प्रासंगिक हेडर सूचना है:
Content-Type: multipart/mixed; boundary="XNlC6OyS4QSiHY2U=_jsXyps6TR34pFNsh"
MIME-Version: 1.0
Date: Tue, 22 Nov 2011 09:11:58 +0000
A test of the BDS2006-bundled version of Indy
--XNlC6OyS4QSiHY2U=_jsXyps6TR34pFNsh
Content-Type: application/octet-stream;
name="20111122.xls"
और यह इंडी 10.5 से एक ही हेडर सूचना है .8 (स्नैपशॉट 10_4702 जो मैं कल स्थापित):
Content-Type: multipart/mixed; boundary="CDbEncbFvL7RZdOJ3DOIRoRBs=_nBsbZms"
MIME-Version: 1.0
Date: Tue, 22 Nov 2011 07:33:46 -0600
investigating more deeply, why does the boundary indicator change?
--h=_WzGWJei29fng7SqdPpDh1nkJxJZhiGc
Content-Type: application/octet-stream;
name="20111122.xls"
समय स्टाम्प तय हो गई है, लेकिन अब सीमा स्ट्रिंग सही नहीं है। नतीजा यह है कि मेरे आईएमएपी फ़ोल्डर में जोड़े गए संदेश में कुछ भी नहीं है।
यहाँ प्रासंगिक कोड है कि ई-मेल संदेश और लगाव, भेजता है बनाता है, और IMAP फ़ोल्डर में एक प्रति कहते हैं:
FTheMsg.Date := Now; // FTheMsg is a component dropped onto the form
FTheMsg.Recipients.EMailAddresses := edMailTo.Text;
FTheMsg.ClearBody;
FTheMsg.Subject := 'Glucose Readings ' + FormatDateTime('mm/dd/yy', FStartDate) + ' - ' +
FormatDateTime('mm/dd/yy', FEndDate);
FTheMsg.Body.Assign(FMemo.Lines);
// create the attachment
TIdAttachmentFile.Create(FTheMsg.MessageParts, fileName);
// send the mail!
FSmtp.Host := FSMTPHost; // values set up elsewhere, FSmtp is a component on the form
FImap.Host := FIMAPHost; // FImap is also a component on the form
FSmtp.Connect;
try
FSmtp.Send(FTheMsg);
FImap.Connect;
try
if (not FImap.AppendMsg('Sent Items', FTheMsg, FTheMsg.LastGeneratedHeaders, [mfSeen])) then
StatusBar1.Panels[4].Text := 'Failed append msg';
finally
FImap.Disconnect;
end;
finally
FSmtp.Disconnect;
end;
जैसा कि मैंने कहा, ईमेल भेजा जाता है कि ठीक है और ठीक से प्रदर्शित करता है । लेकिन जो मेरे आईएमएपी फ़ोल्डर में जोड़ा गया है (उपरोक्त FImap.AppendMsg() में) गलत है। मैंने यह देखने के लिए कोड के माध्यम से पता लगाने का प्रयास किया है कि यह कहां गलत हो रहा है, लेकिन स्पष्ट रूप से, मैं इंडी और विभिन्न ईमेल प्रोटोकॉल/आरएफसी के साथ पर्याप्त परिचित नहीं हूं कि यह निर्धारित करने में सक्षम हो कि क्या गलत हो रहा है। मैं बस इतना कह सकता हूं कि पुराने संस्करण फ़ोल्डर में इसे जोड़ने से पहले एक अस्थायी फ़ाइल में संदेश सहेजता है, जबकि नया संस्करण इसके बजाय मेमोरी स्ट्रीम में सहेजता है। जाहिर है, इसके बारे में कुछ अलग है, लेकिन मैं वर्तमान में यह निर्धारित करने के लिए बहुत अज्ञानी हूं।
क्या पुराने संस्करण में टाइमस्टैम्प समस्या को ठीक करने का कोई आसान तरीका है? यदि ऐसा है, तो यह मेरे उपयोग के लिए ठीक होगा, क्योंकि बाकी सब कुछ सही प्रतीत होता है। यदि नहीं, तो गलत सीमा स्ट्रिंग के साथ यहां प्रदर्शित समस्या को ठीक करने के लिए मुझे और क्या करने की आवश्यकता है?
(यह मेरा स्वयं के उपयोग के लिए सख्ती से एक आवेदन पत्र है, मैं गलत तारीख के साथ अगर मैं करने के लिए है रह सकते हैं, लेकिन मेरे 'भेजे गए आइटम' फ़ोल्डर में "खाली दिखाई दे रहा" प्रति के साथ नहीं।)
यदि अधिक जानकारी की आवश्यकता है, तो मैं खुशी से आपूर्ति कर सकता हूं जो भी मैं कर सकता हूं।
[संपादित करें: मैंने इंडी के पुराने संस्करण का उपयोग करके, मेरे कोड में एक क्लज का कुछ शामिल किया था। मैंने इसे संदेश भेजने से पहले यूटीसी/जीएमटी समय पर संदेश की तारीख/समय निर्धारित किया है, और कम से कम, संदेश को रिसीवर के अंत में सही समय रखने की अनुमति देता है। मुझे विशेष रूप से उस फिक्स की परवाह नहीं है, लेकिन यह चाल है।]
ठीक है, इसका असर पड़ा, लेकिन वास्तव में मैं जो खोज रहा था वह बिल्कुल नहीं था। मैंने एक मेमोरी स्ट्रीम बनाया है, FTheMsg सेट करें। एनकोड: = गलत, संदेश को स्ट्रीम में सहेजा गया, FTheMsg को रीसेट करें। एनकोड: = सही और संदेश को पुनः लोड किया गया, फिर इसे TIdSMTP.Send() और TIdIMAP4.AppendMsg() से पास किया गया 'अतिरिक्त हेडर' पैरामीटर के रूप में शून्य। नतीजा यह है कि मुझे कोई अनुलग्नक नहीं मिला, और संदेश में कोई पाठ दिखाई नहीं दे रहा है! – pejurgenson
यह पूर्ण संदेश है जब इसे NoEncode = False से सहेजा गया था, फिर NoEncode = True 'code' विषय के साथ पुनः लोड किया गया: ग्लूकोज रीडिंग्स 11/07/11 - 11/20/11 करने के लिए: [email protected] सामग्री-प्रकार: मल्टीपार्ट/मिश्रित; सीमा = "D9uTCLury1wVu8hlPEcf = _0afpyB9eNLrK" माइम-संस्करण: 1.0 दिनांक: मंगल, 22 नवंबर 2011 15:00:10 -0600 इस MIME प्रारूप में एक बहु-भाग संदेश है। NoEncode = गलत के साथ, सहेजा गया संदेश पूरा दिखाई देता है। – pejurgenson
क्षमा करें, मैं NoEncode सेट करने के बारे में थोड़ा गलत पढ़ता हूं - मैंने इसे NoDecode के रूप में पढ़ा है! उफ़। अगर मैं आपके नोट में सही तरीके से ऐसा करता हूं, तो प्राप्तकर्ता और मेरे 'प्रेषित आइटम' फ़ोल्डर में संदेश सही ढंग से आता है। मदद के लिए बहुत बहुत धन्यवाद, यह बहुत सराहना की है! मैं निश्चित रूप से इस जवाब को स्वीकार करूंगा। – pejurgenson