मैंने ऐप के लिए बैकएंड और फ्रंटएंड को तैयार किया, ऐप के माध्यम से नेविगेट करते हुए सभी घटकों का परीक्षण किया। मैंने पासवर्ड रीसेट सुविधा को आखिरी के लिए छोड़ दिया। जब मैंने ओटीपी भेजने के लिए अपना ईमेल पता दर्ज किया, तो मुझे वेब ब्राउज़र में अलर्ट के रूप में निम्नलिखित त्रुटि प्राप्त हुई:
टीसीपी 192.168.48.210:43244->103.103.197.223:587 लिखें: लिखें: टूटा हुआ पाइप
जब भी मैं ओटीपी भेजने का प्रयास करता हूं तो बग पुन: उत्पन्न हो सकता है।
चैटजीपीटी और कुछ शोध की मदद से, मुझे निम्नलिखित समझ में आया:
मेरे ऐप का सर्वर एक टीसीपी कनेक्शन पर लिखने का प्रयास कर रहा है। सर्वर मेरी मशीन पर पोर्ट 43244 (निजी आईपी पता 192.168.48.210) से ज़ोहोमेल के एसएमटीपी सर्वर (आईपी पता 103.103.197.223, पोर्ट नंबर 587) पर (ईमेल) लिखने का प्रयास कर रहा है। लिखना विफल रहा (लिखें: टूटा हुआ पाइप), क्योंकि यह टीसीपी कनेक्शन पर लिखने का प्रयास कर रहा था जो पहले ही बंद हो चुका है।
मुझे पता चला कि यदि एसएमटीपी सर्वर बहुत लंबे समय तक निष्क्रिय रहता है तो वह किसी भी टीसीपी कनेक्शन को बंद कर देगा।
मैं पहले क्या कर रहा था-
config/smtpConnection.go से फ़ंक्शन SMTPConnect() SMTP सर्वर पर tcp कनेक्शन पर डायलिंग और प्रमाणीकरण करता है। मैंने सर्वर ऐप को इनिशियलाइज़ करते समय इस फ़ंक्शन को कॉल किया था।
क्या हुआ, जब मैं आरंभीकरण के बाद SMTPClient का उपयोग कर रहा था, ऐप टीसीपी कनेक्शन पर लिखने का प्रयास कर रहा था जो ऐप शुरू होने पर बनाया गया था। इस टीसीपी कनेक्शन का समय समाप्त हो गया क्योंकि यह निष्क्रिय पड़ा हुआ था जबकि इस पर भेजने के लिए कुछ भी नहीं था, इसलिए मुझे त्रुटि मिली।
मुझे क्या करने की ज़रूरत है-
ऐप आरंभ होने पर शुरुआत में ही SMTPConnect() फ़ंक्शन को कॉल करने के बजाय, मुझे ईमेल भेजने से पहले हर बार एक टीसीपी कनेक्शन खोलना होगा, और इसे तुरंत बाद बंद करना होगा, ताकि समय समाप्त होने से बचा जा सके।
ऐसा करने के लिए मैंने जो कदम उठाए हैं वे यहां दिए गए हैं:
func init() { godotenv.Load() config.DBConnect() config.RedisConnect() }
परिवर्तन करने के बाद सेंडओटीपी फ़ंक्शन के लिए अंतिम कोड यहां दिया गया है:
func SendOTP(otp string, recipient string) error { // connecting here because connection tends to time out config.SMTPConnect() sender := os.Getenv("SMTP_EMAIL") client := config.SMTPClient // setting the sender err := client.Mail(sender) if err != nil { return err } // set recipient err = client.Rcpt(recipient) if err != nil { return err } // start writing email writeCloser, err := client.Data() if err != nil { return err } // contents of the email msg := fmt.Sprintf(emailTemplate, recipient, otp) // write the email _, err = writeCloser.Write([]byte(msg)) if err != nil { return err } // close and send email err = writeCloser.Close() if err != nil { return err } // close smtp connection err = client.Close() if err != nil { return err } return nil }
अब, बग को ठीक कर दिया गया है और ईमेल वैसे ही भेजे जा रहे हैं जैसे उन्हें भेजे जाने चाहिए।
सुविधा अब पूरी हो गई है। पढ़ने के लिए आपका शुक्रिया।
ऐप को यहां रेंडर पर तैनात किया गया है
स्रोत कोड GitHub रिपोजिटरी में है
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3