Computer >> कंप्यूटर ट्यूटोरियल >  >> सॉफ्टवेयर >> ईमेल

AWS पर Go के साथ सर्वरलेस ईमेल सब्सक्रिप्शन सूची बनाएं

इस लेख में, मैं साझा करूँगा कि कैसे मैंने प्यार से एक सब्सक्रिप्शन साइन अप फ्लो बनाया जिसमें ईमेल पुष्टिकरण शामिल है जो खराब नहीं है। आप भी इसे कर सकते हैं।

यदि आप इसे क्रिया में देखना चाहते हैं, तो अब आप victoria.dev पर मेरी ईमेल सूची की सदस्यता ले सकते हैं।

अब, मैं आपको दिखाऊंगा कि मैंने इसे कैसे बनाया।

सिंपल सब्सक्राइब का परिचय

यदि आप अपनी मेलिंग सूची या न्यूज़लेटर प्रबंधित करने में रुचि रखते हैं, तो आप अपने स्वयं के AWS संसाधनों पर सिंपल सब्सक्राइब सेट अप कर सकते हैं ताकि ईमेल पते एकत्र किए जा सकें।

यह ओपन सोर्स API Go में लिखा गया है, और AWS Lambda पर चलता है। आपकी साइट के विज़िटर आपकी सूची में साइन अप कर सकते हैं, जिसे DynamoDB टेबल में संग्रहीत किया जाता है, जिसे आप अपने अवकाश पर क्वेरी या निर्यात कर सकते हैं।

जब कोई साइन अप करता है, तो उन्हें अपनी सदस्यता की पुष्टि करने के लिए कहने वाला एक ईमेल प्राप्त होगा। इसे कभी-कभी "डबल ऑप्ट-इन" कहा जाता है, हालांकि मैं "सत्यापित" शब्द पसंद करता हूँ।

सिंपल सब्सक्राइब सर्वरलेस इंफ्रास्ट्रक्चर पर काम करता है और सब्सक्रिप्शन, पुष्टिकरण और अनसब्सक्राइब अनुरोधों को संभालने के लिए AWS Lambda का उपयोग करता है।

आप सिंपल सब्सक्राइब प्रोजेक्ट को GitHub पर पा सकते हैं, इसके पूर्णतः ओपन-सोर्स कोड के साथ। मैं आपको कोड को खोलने और साथ चलने के लिए प्रोत्साहित करता हूँ!

इस पोस्ट में मैं प्रत्येक बिल्ड चरण, API के एकल-जिम्मेदारी फ़ंक्शन के पीछे की विचार प्रक्रिया, और इस तरह के AWS प्रोजेक्ट के लिए सुरक्षा विचारों को साझा करूँगा।

सत्यापित सब्सक्रिप्शन फ्लो कैसे बनाएं

एक गैर-सत्यापित ईमेल साइन अप प्रक्रिया सीधी है। कोई आपकी वेबसाइट पर एक बॉक्स में अपना ईमेल डालता है, फिर वह ईमेल आपके डेटाबेस में चला जाता है।

हालांकि, अगर मैंने आपको उपयोगकर्ता इनपुट पर भरोसा न करने के बारे में कुछ सिखाया है, तो गैर-सत्यापित साइन अप प्रक्रिया का विचार आपकी चिंता बढ़ा देना चाहिए। स्पैम एक सैंडविच में तले जाने पर बहुत अच्छा हो सकता है, लेकिन जब यह आपके AWS बिल को बढ़ा रहा हो तो यह मजेदार नहीं है।

जबकि आप मानव सत्यापन के लिए CAPTCHA या पहेली जैसी रणनीति का उपयोग कर सकते हैं, ये आपके संभावित सब्सक्राइबर्स को दूर करने के लिए पर्याप्त घर्षण पैदा कर सकते हैं।

इसके बजाय, एक पुष्टिकरण ईमेल पते की शुद्धता और उपयोगकर्ता संवेदनशीलता दोनों को सुनिश्चित करने में मदद कर सकता है।

ईमेल पुष्टिकरण के साथ एक सब्सक्रिप्शन फ्लो बनाने के लिए, प्रत्येक तार्किक चरण को पूरा करने वाले एकल-जिम्मेदारी फ़ंक्शन बनाएं। वे हैं:

  1. एक ईमेल पता स्वीकार करें और इसे रिकॉर्ड करें।
  2. उस ईमेल पते से जुड़ा एक टोकन जनरेट करें और इसे रिकॉर्ड करें।
  3. उस ईमेल पते पर टोकन के साथ एक पुष्टिकरण ईमेल भेजें।
  4. एक सत्यापन अनुरोध स्वीकार करें जिसमें ईमेल पता और टोकन दोनों हों।

इन लक्ष्यों में से प्रत्येक को प्राप्त करने के लिए, सिंपल सब्सक्राइब DynamoDB और SES के साथ इंटरैक्ट करने के लिए Go के लिए आधिकारिक AWS SDK का उपयोग करता है।

प्रत्येक चरण में, विचार करें कि डेटा कैसा दिखता है और आप इसे कैसे संग्रहीत करते हैं। यह "क्या होता है अगर कोई दो बार सब्सक्राइब करने की कोशिश करता है?" या यहां तक कि खतरा मॉडलिंग जैसे "क्या होता है अगर कोई किसी ऐसे ईमेल से सब्सक्राइब करता है जिसका वे मालिक नहीं हैं?" जैसे पहेलियों को संभालने में मदद कर सकता है।

तैयार? आइए प्रत्येक चरण को तोड़ें और देखें कि जादू कैसे होता है।

सब्सक्राइबिंग

सब्सक्रिप्शन प्रक्रिया एक विनम्र वेब फॉर्म से शुरू होती है, जैसे मेरी साइट के मुख्य पृष्ठ पर। type="email" required विशेषताओं वाला एक फॉर्म इनपुट ब्राउज़र की बदौलत सत्यापन में मदद करता है। सबमिट होने पर, फॉर्म सिंपल सब्सक्राइब सब्सक्रिप्शन एंडपॉइंट पर एक GET अनुरोध भेजता है।

सिंपल सब्सक्राइब इच्छित सब्सक्राइबर के ईमेल वाले क्वेरी स्ट्रिंग के साथ इस एंडपॉइंट पर एक GET अनुरोध प्राप्त करता है। यह तब एक id मान जनरेट करता है और दोनों email और id को आपकी DynamoDB टेबल में जोड़ता है।

टेबल आइटम अब इस तरह दिखता है:

email confirm id timestamp
subscriber@example.com false uuid-xxxxx 2020-11-01 00:27:39

confirm कॉलम, जो एक बूलियन रखता है, इंगित करता है कि आइटम एक सब्सक्रिप्शन अनुरोध है जिसकी अभी तक पुष्टि नहीं हुई है। डेटाबेस में ईमेल पते को सत्यापित करने के लिए, आपको सही आइटम ढूंढना होगा और confirm को true में बदलना होगा।

जैसे ही आप अपने डेटा के साथ काम करते हैं, प्रत्येक मैनिपुलेशन के लक्ष्य पर विचार करें और आप आने वाले अनुरोध की तुलना मौजूदा डेटा से कैसे कर सकते हैं।

उदाहरण के लिए, यदि किसी ने उसी ईमेल पते के लिए बाद में सब्सक्रिप्शन अनुरोध किया, तो आप इसे कैसे संभालेंगे?

आप कह सकते हैं, "एक नई लाइन आइटम एक नए id के साथ बनाएं।" हालांकि, जब आपका सर्वरलेस एप्लिकेशन डेटाबेस अनुरोध मात्रा द्वारा भुगतान किया जाता है, तो यह सबसे अच्छी रणनीति नहीं हो सकती है।

चूंकि DynamoDB मूल्य निर्धारण इस बात पर निर्भर करता है कि आप अपनी टेबल्स पर कितना डेटा पढ़ते और लिखते हैं, अतिरिक्त डेटा जमा करने से बचना फायदेमंद है।

इसे ध्यान में रखते हुए, उसी ईमेल के लिए सब्सक्रिप्शन अनुरोधों को एक नई लाइन जोड़ने के बजाय अपडेट करके संभालना विवेकपूर्ण होगा।

सिंपल सब्सक्राइब वास्तव में डेटाबेस आइटम को जोड़ने या अपडेट करने के लिए समान फ़ंक्शन का उपयोग करता है। इसे आमतौर पर "अपडेट या इन्सर्ट" कहा जाता है।

SQLite जैसे डेटाबेस में यह UPSERT सिंटैक्स के साथ पूरा होता है। DynamoDB के मामले में, आप एक अपडेट ऑपरेशन का उपयोग करते हैं। Go SDK के लिए, इसका सिंटैक्स UpdateItem है।

जब एक डुप्लिकेट सब्सक्रिप्शन अनुरोध प्राप्त होता है, तो डेटाबेस आइटम का मिलान केवल email पर किया जाता है। यदि कोई मौजूदा लाइन आइटम मिलता है, तो उसका id और timestamp ओवरराइड हो जाता है, जो मौजूदा डेटाबेस रिकॉर्ड को अपडेट करता है और आपकी टेबल को डुप्लिकेट अनुरोधों से भरने से बचाता है।

ईमेल पते कैसे सत्यापित करें

फॉर्म सबमिट करने के बाद, इच्छित सब्सक्राइबर को SES से एक ईमेल प्राप्त होता है जिसमें एक लिंक होता है। यह लिंक टेबल से email और id का उपयोग करके बनाया गया है, और इसका प्रारूप है:

<BASE_URL><VERIFY_PATH>/?email=subscriber@example.com&id=uuid-xxxxx

इस सेट अप में, id एक UUID है जो एक गुप्त टोकन के रूप में कार्य करता है। यह एक पहचानकर्ता प्रदान करता है जिससे आप मिलान कर सकते हैं जो पर्याप्त रूप से जटिल और अनुमान लगाने में कठिन है। यह दृष्टिकोण लोगों को उन ईमेल पतों से सब्सक्राइब करने से रोकता है जिन्हें वे नियंत्रित नहीं करते।

लिंक पर जाने से आपके सत्यापन एंडपॉइंट पर क्वेरी स्ट्रिंग में email और id के साथ एक अनुरोध भेजा जाता है।

इस बार, आने वाले email और id मानों दोनों की तुलना डेटाबेस रिकॉर्ड से करना महत्वपूर्ण है। यह सत्यापित करता है कि पुष्टिकरण ईमेल का प्राप्तकर्ता अनुरोध शुरू कर रहा है।

सत्यापन एंडपॉइंट यह सुनिश्चित करता है कि ये मान आपके डेटाबेस में एक आइटम से मेल खाते हैं, फिर confirm को true पर सेट करने और टाइमस्टैम्प अपडेट करने के लिए एक और अपडेट ऑपरेशन करता है। आइटम अब इस तरह दिखता है:

email confirm id timestamp
subscriber@example.com true uuid-xxxxx 2020-11-01 00:37:39

ईमेल कैसे क्वेरी करें

अब आप अपनी ईमेल सूची बनाने के लिए अपनी टेबल को क्वेरी कर सकते हैं। आपके ईमेल भेजने के समाधान के आधार पर, आप इसे मैन्युअल रूप से, किसी अन्य Lambda के साथ, या यहां तक कि कमांड लाइन से भी कर सकते हैं।

चूंकि अनुरोधित सदस्यता के लिए डेटा (जहां confirm false है) पुष्टिकृत सदस्यता के साथ टेबल में संग्रहीत है, इसलिए ईमेल पतों के लिए क्वेरी करते समय इस डेटा को अलग करना महत्वपूर्ण है जिन्हें भेजा जाना है। आप यह सुनिश्चित करना चाहेंगे कि आप केवल वही ईमेल लौटाएं जहां confirm true है।

अनसब्सक्राइब लिंक कैसे प्रदान करें

ईमेल पते को सत्यापित करने के समान, सिंपल सब्सक्राइब आपके DynamoDB टेबल से एक आइटम को हटाने वाले फ़ंक्शन के लिए तर्क के रूप में email और id का उपयोग करता है ताकि एक ईमेल पते को अनसब्सक्राइब किया जा सके।

लोगों को आपकी सूची से खुद को हटाने की अनुमति देने के लिए, आपको प्रत्येक ईमेल में एक URL प्रदान करना होगा जिसमें उनके email और id को अनसब्सक्राइब एंडपॉइंट पर क्वेरी स्ट्रिंग के रूप में शामिल किया गया हो। यह कुछ इस तरह दिखेगा:

<BASE_URL><UNSUBSCRIBE_PATH>/?email=subscriber@example.com&id=uuid-xxxxx

जब लिंक पर क्लिक किया जाता है, तो क्वेरी स्ट्रिंग को अनसब्सक्राइब एंडपॉइंट पर पास किया जाता है। यदि प्रदान किया गया email और id डेटाबेस आइटम से मेल खाता है, तो वह आइटम हटा दिया जाएगा।

अपने सब्सक्राइबर्स को बिना किसी मानवीय हस्तक्षेप के आपकी सूची से स्वचालित रूप से खुद को हटाने की विधि प्रदान करना, आपको सौंपे गए डेटा को संभालने के प्रति नैतिक और सम्मानजनक दर्शन का हिस्सा है।

अपने डेटा की देखभाल कैसे करें

एक बार जब आप अन्य लोगों के डेटा को स्वीकार करने का निर्णय लेते हैं, तो इसकी देखभाल करना आपकी जिम्मेदारी बन जाती है। यह आपके द्वारा बनाई गई हर चीज पर लागू होता है। सिंपल सब्सक्राइब के लिए, इसका मतलब है अपने डेटाबेस की सुरक्षा बनाए रखना, और समय-समय पर अपनी टेबल को प्रून करना।

जहां confirm false है और timestamp एक विशेष समय से पुराना है, उन डेटाबेस आइटम को एक निश्चित समय सीमा से आगे बनाए रखने से बचने के लिए, एक सफाई फ़ंक्शन सेट अप करना एक अच्छा विचार होगा जो नियमित शेड्यूल पर चलता है। इसे मैन्युअल रूप से, AWS Lambda फ़ंक्शन के साथ, या कमांड लाइन का उपयोग करके प्राप्त किया जा सकता है।

साफ करने के लिए, उन डेटाबेस आइटम को ढूंढें जहां confirm false है और timestamp एक विशेष समय से पुराना है। आपके उपयोग के मामले और अनुरोध मात्रा के आधार पर, आप जिस आवृत्ति पर सफाई करना चुनते हैं वह अलग-अलग होगी।

आपके उपयोग के मामले के आधार पर, आप अपने डेटा का बैकअप रखना चाह सकते हैं। यदि आप डेटा अखंडता के बारे में विशेष रूप से चिंतित हैं, तो आप DynamoDB के लिए ऑन-डिमांड बैकअप या पॉइंट-इन-टाइम रिकवरी का पता लगा सकते हैं।

अपना स्वतंत्र सब्सक्राइबर बेस बनाएं

अपनी खुद की सब्सक्राइबर सूची बनाना एक सशक्त प्रयास हो सकता है! चाहे आप एक न्यूज़लेटर शुरू करना चाहते हों, नई सामग्री के लिए सूचनाएं भेजना चाहते हों, या अपने काम के आसपास एक समुदाय बनाना चाहते हों, मेरे से आपके लिए एक ईमेल से अधिक व्यक्तिगत या सीधा कुछ भी नहीं है।

मैं आपको आज सिंपल सब्सक्राइब के साथ अपना सब्सक्राइबर बेस बनाना शुरू करने के लिए प्रोत्साहित करता हूँ। मेरे अधिकांश काम की तरह, यह ओपन सोर्स है और आपके व्यक्तिगत उपयोग के लिए मुफ्त है। GitHub रिपॉजिटरी में कोड में गोता लगाएँ या SimpleSubscribe.org पर और जानें।

यदि आपको यह पोस्ट पसंद आया, तो मुझे जानकर अच्छा लगेगा। victoria.dev पर मेरे साथ सीखने वाले हजारों लोगों से जुड़ें। इस तरह की और परियोजनाओं के लिए विजिट करें या RSS के माध्यम से सब्सक्राइब करें।

  1. SendGrid और Next.js के साथ संपर्क फ़ॉर्म कैसे बनाएँ? SendGrid और Next.js के साथ संपर्क फ़ॉर्म कैसे बनाएँ?

    संपर्क फ़ॉर्म वेबसाइटों पर उपयोगी होते हैं यदि आप चाहते हैं कि आपके उपयोगकर्ता ईमेल पर आपके साथ बातचीत कर सकें। और उन्हें बनाने के बहुत सारे तरीके हैं। परंपरागत रूप से आपने या तो सर्वर पर ईमेल भेजने के लिए PHP का उपयोग किया होगा या कोई तृतीय पक्ष सेवा जो ईमेल तर्क का ध्यान रखेगी। लेकिन इस लेख में

  1. Vue.js में EmailJS का उपयोग करके संपर्क फ़ॉर्म ईमेल भेजें – चरण-दर-चरण मार्गदर्शिका Vue.js में EmailJS का उपयोग करके संपर्क फ़ॉर्म ईमेल भेजें – चरण-दर-चरण मार्गदर्शिका

    कुछ दिन पहले मैंने एक साधारण Vue प्रोजेक्ट पर काम करने का फैसला किया और एक संपर्क फ़ॉर्म के माध्यम से ईमेल भेजने की आवश्यकता थी जिसे मैंने अभी बनाया था। मैं हर बार एक स्वचालित ईमेल प्राप्त करना चाहता था जब कोई मेरा संपर्क फ़ॉर्म भरता था। तो मैंने खोज शुरू की और EmailJS पर ठोकर खाई। मैंने यह लेख लिख

  1. अपना GitHub मार्केटप्लेस ऐप प्रकाशित करें: लिस्टिंग और विजिबिलिटी के लिए चरण-दर-चरण मार्गदर्शिका अपना GitHub मार्केटप्लेस ऐप प्रकाशित करें: लिस्टिंग और विजिबिलिटी के लिए चरण-दर-चरण मार्गदर्शिका

    क्या आप अपने GitHub मार्केटप्लेस ऐप से डेवलपर्स के GitHub वर्कफ़्लो को बेहतर बनाना चाहते हैं? GitHub मार्केटप्लेस एक ऐसी जगह है जहां डेवलपर्स मुफ्त और सशुल्क टूल का उपयोग कर सकते हैं। प्लेटफ़ॉर्म डेवलपर्स को विभिन्न प्रकार के टूल प्रदान करता है जैसे Actions और Apps, जहां प्रत्येक टूल को प्लेटफ़ॉर्म