2010-01-27 6 views
6

मैं एक ई-मेल जीमेल खाते (डेल्फी 7, ​​इंडी 10) इन सेटिंग के साथ भेजने के लिए कोशिश कर रहा हूँ:इंडी 10 - IdSMTP.Send() हैंग हो जीमेल से संदेश भेजने के खाते

TIdSmtp:

Port = 587; 
UseTLS := utUseExplicitTLS; 

TIdSSLIOHandlerSocketOpenSSL:

SSLOptions.Method := sslvTLSv1; 

सब कुछ ठीक से सेट किया जा रहा है। मुझे यह प्रतिक्रिया मिलती है:

Resolving hostname smtp.gmail.com. 
Connecting to 74.125.77.109. 
SSL status: "before/connect initialization" 
SSL status: "before/connect initialization" 
SSL status: "SSLv3 write client hello A" 
SSL status: "SSLv3 read server hello A" 
SSL status: "SSLv3 read server certificate A" 
SSL status: "SSLv3 read server done A" 
SSL status: "SSLv3 write client key exchange A" 
SSL status: "SSLv3 write change cipher spec A" 
SSL status: "SSLv3 write finished A" 
SSL status: "SSLv3 flush data" 
SSL status: "SSLv3 read finished A" 
SSL status: "SSL negotiation finished successfully" 
SSL status: "SSL negotiation finished successfully" 
Cipher: name = RC4-MD5; description = RC4-MD5     SSLv3 Kx=RSA  Au=RSA Enc=RC4(128) Mac=MD5 
; bits = 128; version = TLSv1/SSLv3; 

और फिर यह लटकता है और समाप्त नहीं होता है। ई-मेल नहीं भेजा गया है। क्या समस्या हो सकती है?

उत्तर

3

समस्या आसान था। मैं पर्याप्त धैर्य नहीं था और आवेदन लटका नहीं था, लंबे समय तक था। टाइमआउट गलत सेटिंग्स का परिणाम था।

1

सबसे पहले, क्या आपने सत्यापित किया है कि कोड अन्य ईमेल सर्वर के साथ काम कर रहा है?

कुछ समय पहले किसी ने बताया कि उन्हें इंडी टीआईडीएचटीटीपी घटक के साथ http अनुरोधों को स्वीकार करने वाले कुछ सर्वरों में समस्याएं आ रही हैं।

 Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)'; 

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

मुझे यकीन नहीं है कि आप जिस घटक का उपयोग कर रहे हैं उसके पास उपयोगकर्ता एजेन्ट संपत्ति का कोई भी प्रकार है। लेकिन अगर ऐसा होता है, तो इंडी के किसी भी संदर्भ को हटा दें।

+1

उपयोगकर्ता एजेन्ट HTTP अनुरोधों के लिए है, एसएमटीपी – glob

+0

** ग्लोब ** आप सही हैं; मैंने यह कहकर निष्कर्ष निकाला "मुझे यकीन नहीं है कि आप जिस घटक का उपयोग कर रहे हैं उसके पास उपयोगकर्ता एजेन्ट प्रॉपर्टी का कोई भी प्रकार है" –

4

हां, मैंने इंडी 10 और टीएलएस (आमतौर पर जीमेल) के साथ कई मुद्दों को देखा है।

पहले सुनिश्चित करें कि आप नवीनतम ssl पुस्तकालयों from here

मैं रुक-रुक कर स्टालों और त्रुटियों है कि खून बह रहा किनारे (यानी। एक गैर स्थिर रिलीज) Indy के संस्करण में समाधान हो गया है देखा है की है। देख http://www.indyproject.org/sockets/download/svn.DE.aspx

जीमेल के लिए

, मैं आम तौर पर पोर्ट 465 पर implicityTLS का उपयोग ..

idSmtp := TIdSMTP.Create(nil); 
    try 
    idSmtp.IOHandler := nil; 
    idSmtp.ManagedIOHandler := true; 

    // try to use SSL 
    try 
     TIdSSLContext.Create.Free; 
     idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp); 
     if (smtpSettings.port = 465) then 
     idSmtp.UseTLS := utUseImplicitTLS 
     else 
     idSmtp.UseTLS := utUseExplicitTLS; 
    except 
     idSmtp.IOHandler.Free; 
     idSmtp.IOHandler := nil; 
    end; 

    if (idSmtp.IOHandler = nil) then 
    begin 
     idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp); 
     idSmtp.UseTLS := utNoTLSSupport; 
    end; 

    // send message, etc 

    finally 
    idSmtp.Free; 
    end; 
+0

उत्कृष्ट! आपकी पोस्ट ने मेरी मदद की। मेरा ऐप smtp.send के दौरान भी जम गया। मुझे लगता है कि कुंजी utUseImplicitTLS विकल्प था, लेकिन मुझे यह भी समझ में नहीं आया कि यह TIdSSLContex.Create.Free करता है। – Tamm

+0

TIdSSLContext.Create.Free एक वस्तु बनाता है और तुरंत इसे मुक्त करता है। यदि TIdSSLContext ऑब्जेक्ट नहीं बनाया जा सकता है तो यह अपवाद ट्रिगर करने के लिए है। – glob

1

इंडी का परीक्षण करते समय, आपको यह सुनिश्चित करना चाहिए कि "डेल्फी अपवादों पर रोकें" चेक किया गया है (उपकरण, डीबगर विकल्प, भाषा अपवाद)।

कुछ दिनचर्या, विशेष रूप से idSMTP.Send, 'खाती है' (या छुपाएं) अपवाद जिसके परिणामस्वरूप लटका हुआ है।

संबंधित मुद्दे