"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पासवर्ड रीसेट सुविधा: एसएमटीपी डिबगिंग

पासवर्ड रीसेट सुविधा: एसएमटीपी डिबगिंग

2024-11-03 को प्रकाशित
ब्राउज़ करें:433

Password Reset Feature: SMTP Debugging

बग

मैंने ऐप के लिए बैकएंड और फ्रंटएंड को तैयार किया, ऐप के माध्यम से नेविगेट करते हुए सभी घटकों का परीक्षण किया। मैंने पासवर्ड रीसेट सुविधा को आखिरी के लिए छोड़ दिया। जब मैंने ओटीपी भेजने के लिए अपना ईमेल पता दर्ज किया, तो मुझे वेब ब्राउज़र में अलर्ट के रूप में निम्नलिखित त्रुटि प्राप्त हुई:

टीसीपी 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() फ़ंक्शन को कॉल करने के बजाय, मुझे ईमेल भेजने से पहले हर बार एक टीसीपी कनेक्शन खोलना होगा, और इसे तुरंत बाद बंद करना होगा, ताकि समय समाप्त होने से बचा जा सके।

ऐसा करने के लिए मैंने जो कदम उठाए हैं वे यहां दिए गए हैं:

  1. main.go में init() फ़ंक्शन से SMTPConnect() फ़ंक्शन पर कॉल हटाएं। अब init() फ़ंक्शन है:
func init() {
    godotenv.Load()

    config.DBConnect()
    config.RedisConnect()
}
  1. SendOTP फ़ंक्शन की शुरुआत में SMTPConnect() फ़ंक्शन को कॉल करें, ताकि हर बार ईमेल भेजने पर SMTP कनेक्शन प्रारंभ हो जाए
  2. ईमेल लिखे जाने के बाद, SMTPClient पर क्लोज़() को कॉल करके SMTP कनेक्शन बंद करें

परिवर्तन करने के बाद सेंडओटीपी फ़ंक्शन के लिए अंतिम कोड यहां दिया गया है:

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 रिपोजिटरी में है

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/bitorsic/password-reset-feature-smtp-debugging-2pla?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3