2009-07-06 5 views
8

डी 7 + इंडी 10 नवीनतम निर्माण का उपयोग करना।डेल्फी + इंडी: कनेक्शन बंद कर दिया गया

मेरा कोड ईमेल भेजने के लिए TIdSMTP का उपयोग कर रहा है। मैं कुछ अंत उपयोगकर्ताओं पर "कनेक्शन बंद हो गया" प्राप्त कर रहा हूं, और ईमेल कभी नहीं भेजा जाता है।

try 
~~~~ 
~~~~ 
_idSMTP := TIdSmtp.Create; 
with _idSMTP do 
begin 
    Host := 'myhost'; 
    Connect; 
    try 
    Send(_EmailMsg); 
    Result := True; 
    except 
    on E: Exception do 
    begin 
     MsgDlgErr(Self.Handle, E.Message) 
    end 
    end; 
end; 
finally 
_idSMTP.Disconnect; 
_idSMTP.Free; 
end; 

किसी भी सलाह:

कोड की तरह है?

उत्तर

20

http://www.swissdelphicenter.ch/en/showarticle.php?id=1

पर इसके बारे में सब पढ़ें EIdConnClosedGracefully एक अपवाद संकेत है कि कनेक्शन जानबूझकर दूसरे पक्ष द्वारा बंद कर दिया गया है। यह एक टूटी हुई कनेक्शन के समान नहीं है जो कनेक्शन रीसेट त्रुटि का कारण बनता है। यदि दूसरी तरफ कनेक्शन बंद कर दिया गया है और सॉकेट पढ़ा गया है या लिखा गया है, EIdConnClosedGracefully इंडी द्वारा उठाया जाएगा। यह को पढ़ने या लिखने का प्रयास करने के समान है जो आपके ज्ञान के बिना बंद हो गया है।

कुछ मामलों में यह एक वास्तविक अपवाद है और आपके कोड को इसे संभालने की आवश्यकता है। अन्य मामलों (आमतौर पर सर्वर) में यह प्रोटोकॉल के कामकाज का एक सामान्य हिस्सा है और इंडी आपके लिए यह अपवाद संभालती है। हालांकि इंडी आईडीई में चलते समय इसे पकड़ता है, तो डीबगर पहले ट्रिगर किया जाएगा। आप जारी रखने के लिए बस F9 दबा सकते हैं और इंडी अपवाद को संभालेगा, लेकिन डीबगिंग के दौरान निरंतर रोकना काफी परेशान हो सकता है। उन मामलों में जहां इंडी अपवाद प्राप्त करता है, आपके उपयोगकर्ता कभी भी आपके प्रोग्राम में अपवाद नहीं देख पाएंगे जब तक कि यह आईडीई से चलाया जाता है।

+0

आईडीई में अपवाद नहीं होता है, लेकिन अंत उपयोगकर्ता कंप्यूटर पर होता है। – Atlas

+0

कुछ वायरस कैनर्स आजकल एसएमटीपी पोर्ट पर आउटगोइंग कनेक्शन ब्लॉक करते हैं। इससे कनेक्शन अप्रतिबंधित हो सकता है और यह त्रुटि फेंक सकती है। –

+2

@ एटलस: यही कारण है कि "कुछ मामलों में ..." :) पृष्ठ भी अन्य मामलों के बारे में बात करता है। –

2

मेरे मामले में त्रुटि के कारण किया गया था क्योंकि मैं smtp सर्वर द्वारा होस्ट की जगह किसी दूसरे डोमेन से एक इस ईमेल पते का उपयोग, इसलिए smtp सर्वर कनेक्शन अस्वीकार कर दिया है।

1

मेरे अनुभव में, एटी & टी सर्वर के मामले में, यह एक ईमेल पता अस्वीकार करता है जो में @att.net पता नहीं है। TIdLogEvent का उपयोग करके इन उपयोगकर्ताओं को प्राप्त करने के लिए त्रुटि को लॉग इन करके अधिक जानकारी निर्धारित की जा सकती है, अन्यथा त्रुटि रिपोर्ट अपेक्षाकृत अस्पष्ट है - अगर डिस्कनेक्ट (कनेक्शन बंद हो गया है) MAIL FROM के ठीक बाद होता है तो यह एक ईमेल नीति को अस्वीकार कर सकता है वह डोमेन जो टोनी द्वारा समझाया गया है, जैसा होस्ट नहीं करता है।

अन्यथा "कनेक्शन शान से बंद कर दिया गया है" त्रुटि का अर्थ है कि पढ़ने/सॉकेट कि जानबूझकर सहकर्मी द्वारा बंद कर दिया गया पर लिखने के लिए एक प्रयास किया जा रहा है - अपने मामले में, सहकर्मी एसएमटीपी सर्वर से कनेक्ट है। यह "कनेक्शन रीसेट" त्रुटि से अलग है जो टूटा कनेक्शन इंगित करता है। दोनों मामलों में, कनेक्शन अब मौजूद नहीं है और आप इसे अब पढ़/लिख नहीं सकते हैं।