1 पॉइंट द्वारा GN⁺ 2024-05-22 | 2 टिप्पणियां | WhatsApp पर शेयर करें

ईमेल के मुख्य भाग से गायब हुए पूर्णविराम का रहस्य

Simple Mail Transfer Protocol उतना सरल नहीं है

  • Tjaart
    • 20 फ़रवरी 2024

समस्या की शुरुआत

  • एक ग्राहक ने बताया कि उसे भेजे गए ईमेल के मुख्य भाग से पूर्णविराम गायब हो गए थे।
  • वही ईमेल किसी दूसरे ग्राहक को भेजने पर पूर्णविराम गायब नहीं हुए।

प्रोजेक्ट की याद

  • लगभग 7 साल पहले, दस्तावेज़ टेम्पलेट्स को एक ही सिस्टम में एकीकृत करने वाला समाधान विकसित किया गया था।
  • क्लाइंट दस्तावेज़ों में placeholders डालने के लिए Microsoft Word templates का उपयोग करते थे।
  • हर बार जब कोई कर्मचारी ईमेल से दस्तावेज़ भेजता, तो placeholders को वास्तविक सामग्री से बदलना पड़ता था।

टेम्पलेट प्रबंधन की समस्या

  • कई टेम्पलेट versions मौजूद थे, इसलिए उन्हें प्रबंधित करना मुश्किल था।
  • कुछ टेम्पलेट्स में पुराने terms, logos, fonts आदि इस्तेमाल हो रहे थे।
  • सभी टेम्पलेट्स को केंद्र से प्रबंधित करने वाला एक समाधान विकसित किया गया।

समाधान का कार्यान्वयन

  • क्लाइंट PDF दस्तावेज़, text messages और email body बनाने वाले templates को केंद्र से प्रबंधित कर सकते थे।
  • उदाहरण के लिए, नए ग्राहक को भेजे जाने वाले welcome letter template को सेट किया जा सकता था।
  • हर delivery method (email, text message, postal mail) के अनुसार अलग templates कॉन्फ़िगर किए जा सकते थे।

समस्या को दोहराना

  • समस्या केवल एक खास ग्राहक को भेजे गए ईमेल में ही आती थी, जहाँ पूर्णविराम गायब हो जाते थे।
  • टेम्पलेट source code में पूर्णविराम मौजूद था।
  • लोकल environment में email body का preview करने पर पूर्णविराम दिखाई दे रहा था।

कारण का विश्लेषण

  • email body बनाते समय हर line की लंबाई सीमित करने वाला code मौजूद था।
  • जब line तय लंबाई से लंबी हो जाती, तो नई line बनाई जाती और बाकी सामग्री वहाँ भेज दी जाती।
  • SMTP specification के अनुसार, यदि कोई line पूर्णविराम से शुरू होती है, तो एक अतिरिक्त पूर्णविराम जोड़ा जाता है, और server पहला पूर्णविराम हटा देता है।

समाधान

  • code में बदलाव: यदि कोई line पूर्णविराम से शुरू होती है, तो एक अतिरिक्त पूर्णविराम जोड़ा जाए ताकि server एक हटाए तब भी एक पूर्णविराम बचा रहे।
  • संशोधित code का परीक्षण करने पर पुष्टि हुई कि पूर्णविराम अब गायब नहीं हो रहे थे।
  • समस्या हल की गई और दूसरे teams को भी इस bug की जानकारी दी गई।

बाद की समस्या

  • कुछ महीनों बाद, एक दूसरी team ने वही bug fix लागू नहीं किया, जिससे एक महत्वपूर्ण ईमेल में पूर्णविराम फिर गायब हो गए।
  • कुछ ग्राहकों को ऐसे ईमेल मिले जिनमें नई monthly fee $27.00 की जगह $2700 दिखाई गई।
  • तुरंत code patch करने के बाद समस्या हल कर दी गई।

GN⁺ की राय

  1. SMTP specification को समझने का महत्व: ईमेल ट्रांसमिशन के दौरान आने वाली समस्याओं को सुलझाने के लिए SMTP specification की गहरी समझ ज़रूरी है।
  2. टेम्पलेट प्रबंधन की जटिलता: कई versions वाले templates को संभालना जटिल हो सकता है, इसलिए एक केंद्रीय प्रबंधन प्रणाली की ज़रूरत होती है।
  3. डिबगिंग कौशल: समस्या को दोहराने और उसके कारण का विश्लेषण करने की डिबगिंग क्षमता महत्वपूर्ण है।
  4. टीमों के बीच संचार: समस्या हल करने के बाद दूसरी teams के साथ जानकारी साझा करना महत्वपूर्ण है।
  5. स्वचालित परीक्षण: ऐसी समस्याओं को रोकने के लिए automated tests लागू करना अच्छा रहेगा।

2 टिप्पणियां

 
surfindia 2024-05-22

लगता है कि शीर्षक में period को full stop की बजाय अवधि के रूप में लिया गया है, हाहा।

 
GN⁺ 2024-05-22
Hacker News की राय

Hacker News टिप्पणियों का सारांश

  • SMTP client implementation की कठिनाई

    • SMTP client implementation कठिन है, और अगर इसे सही तरह से implement न किया जाए तो bugs आना आसान है। Template layer को SMTP की चिंता नहीं करनी चाहिए।
    • बहुत से लोग terminal के जरिए basic protocol नहीं सीखते, इसलिए ऐसी समस्याएँ होती हैं। संदेश को "single dot" से समाप्त करने का नियम महत्वपूर्ण है।
    • बहुत से programmers escaping की concept को नहीं समझते। वे ऐसे email भेजने की स्थिति पर विचार नहीं करते जिनमें "single dot" शामिल हो।
  • जर्मनी में recommendation letter की कहानी

    • जर्मनी में नौकरी खत्म होने पर recommendation letter मिलना आम बात है। अगर recommendation letter के आखिरी वाक्य में full stop न हो, तो उसका नकारात्मक अर्थ होता है।
    • जब वकील से recommendation letter की जाँच कराई गई, तो आखिरी वाक्य में full stop न होने की वजह से समस्या थी।
  • cron job और SMTP client

    • Email भेजने वाली cron job को अपना खुद का SMTP client implement करने की ज़रूरत नहीं है। mailutils जैसे program का इस्तेमाल किया जा सकता है।
    • Socket के जरिए basic SMTP interaction implement करना अक्षम है। TLS connection और authentication की ज़रूरत होती है।
    • cron में पहले से email भेजने की सुविधा होती है। MAILTO variable का उपयोग करके email address सेट किया जा सकता है।
  • दो बुरी आदतें

    • Standards को आधा-अधूरा implement नहीं करना चाहिए। ज़रूरी सावधानी बरतनी चाहिए या पहले से बनी library का इस्तेमाल करना चाहिए।
    • Dependencies को vendor नहीं करना चाहिए। Libraries को नियमित रूप से update करना चाहिए। Update टालने पर बड़ी समस्या हो सकती है।
  • dot stuffing की ज़रूरत

    • SMTP और POP3 में dot stuffing की ज़रूरत होती है। संबंधित RFC दस्तावेज़ देखे जा सकते हैं।
  • HTML MIME attachment समस्या

    • "We are happy to welcome you to our family." वाक्य line limit से नहीं टकराता। यह HTML MIME attachment हो सकता है।
    • HTML को बिना सोचे-समझे lines में बाँटने से tags टूट सकते हैं।
  • जब पहला character dot हो

    • अगर पहला character dot हो और उसके बाद दूसरे characters हों, तो पहला character हट जाता है। क्योंकि single dot mail के अंत का संकेत देता है।
    • Dot क्यों हटाया जाता है, यह समझना कठिन है। अगला character जाँचने के लिए एक byte store किया जा सकता है।
  • bug patch सूचना

    • SMTP client code किसी पिछले project से लिया गया था, इसलिए दूसरे team को bug के बारे में बताया गया।
    • संभव है कि दूसरे team ने इस bug को patch न किया हो।
  • NNTP server implementation का अनुभव

    • RFC specification के आधार पर NNTP server implement करते समय dot stuffing की समस्या तुरंत समझ में आ गई। यह 80s का protocol है।