Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रेल्स एक्शन मेलबॉक्स के साथ इनबाउंड ईमेल इंटीग्रेशन और ट्रबलशूटिंग में मास्टरी

यदि आपने कभी अपने ईमेल इनबॉक्स में सेंड दबाने पर ईमेल भेजने और प्राप्त करने के आसपास के Request for Comments (RFCs) को देखा है, तो आप शामिल तकनीकी जटिलताओं को देखेंगे।

शुक्र है, कई मौजूदा टूल्स हमें डेवलपर्स के लिए Simple Mail Transfer Protocol (SMTP) सेवा प्रदान करते हैं - आपके द्वारा प्रबंधित एक Postfix सर्वर से लेकर पूरी तरह से स्केलेबल सेंडिंग सर्विस जैसे SendGrid, Amazon SES, या Postmark तक। हालांकि, डिलीवरेबिलिटी या मूल्य निर्धारण कारणों से प्रोवाइडर्स के बीच जाने का मतलब है हमारे ऐप्स को प्रत्येक सर्विस की विचित्रताओं को पूरा करने के लिए फिर से लिखना या रीफैक्टर करना।

रेल्स यहां Action Mailbox प्रदान करके हमारी मदद करता है। इस पोस्ट में, हम इस बात पर गहराई से जाएंगे कि आप इनबाउंड ईमेल को इंटीग्रेट और ट्रबलशूट करने के लिए Action Mailbox का उपयोग कैसे कर सकते हैं।

लेकिन पहले, आइए जल्दी से परिभाषित करें कि Action Mailbox क्या है।

रेल्स के लिए Action Mailbox क्या है?

Action Mailbox रूबी ऑन रेल्स में ईमेल प्राप्त करने के लिए वैचारिक संपीड़न का उपयोग करता है। वैचारिक संपीड़न का अर्थ है कि यह हर SMTP सर्विस के बीच के सभी छोटे अंतरों को समाहित करता है और आपके इनबाउंड प्रोसेसिंग कोड को केवल एक बार लिखता है। आप एक नई सर्विस के लिए प्रोवाइडर भी लिख सकते हैं।

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

यदि आप एक टेस्ट ईमेल भेजने के लिए रेल्स कंडक्टर एक्शन से गुजरते हैं, जैसा कि मैंने यहां किया है:

रेल्स एक्शन मेलबॉक्स के साथ इनबाउंड ईमेल इंटीग्रेशन और ट्रबलशूटिंग में मास्टरी

तो आपके इनबाउंड ईमेल में To, CC, BCC, और X-Original-To फील्ड्स से प्राप्तकर्ता होंगे।


प्रत्येक पते का परीक्षण यह निर्धारित करने के लिए किया जाता है कि इसे कहां रूट किया जाएगा, लेकिन मेल मैसेज को केवल एक बार रूट किया जाता है।

विकास का एक प्रमुख पहलू वास्तव में अपने सिस्टम से ईमेल का परीक्षण करना है। रेल्स के पास रूट्स /rails/conductor/ के तहत डेवलपमेंट पेजों का एक सेट है जो आपको अपने डेवलपमेंट सेटअप में स्थानीय रूप से ईमेल इनपुट करने की अनुमति देता है।

आप ऊपर दिए गए उदाहरण की तरह मैन्युअल रूप से ईमेल दर्ज कर सकते हैं, या आप सभी हेडर्स के साथ पूरा ईमेल अपलोड कर सकते हैं।

पूरा ईमेल (हेडर्स, मैसेज बॉडी और अटैचमेंट के साथ) प्राप्त करने का एक शानदार तरीका Thunderbird जैसे ईमेल क्लाइंट का उपयोग करना है। व्यक्तिगत ईमेल को .eml में सहेजें, फाइल को टेक्स्ट एडिटर से खोलें, और पूर्ण सामग्री को कंडक्टर पेज में कॉपी करें।

अब आप अधिक जटिल ईमेल प्रोसेसिंग का परीक्षण कर सकते हैं।

रेल्स ऐप के लिए पोस्टिंग और कमेंटिंग डेमो

आइए एक छोटा डेमो एक साथ रखें जो दिखाता है कि यह सब कैसे काम करता है। मैं 37Signals का बहुत बड़ा प्रशंसक हूं, और मुझे विशेष रूप से Hey World के साथ उनका ब्लॉगिंग पसंद है। लेकिन वे कमेंट्स की अनुमति नहीं देते, तो आइए एक क्लोन बनाएं जो प्रत्येक ब्लॉग पोस्ट के लिए कमेंट्स शामिल करे।

इस पोस्ट में कोड के साथ फॉलो करें।

एक नया ऐप बनाएं (मैं Tailwind CSS का उपयोग कर रहा हूं, लेकिन आप जो समझ में आए उसे चुन सकते हैं)। मैं Post और Comment मॉडल के लिए Action Text भी जोड़ूंगा।


स्कैफोल्डिंग हमें Posts और Comments को जल्दी से देखने का एक तरीका देती है। post.rb में एसोसिएशन जोड़ें, और पोस्ट संबंधित कमेंट्स प्रदर्शित करेगा:


posts/_post.html.erb में, आइए कमेंट्स पार्शियल जोड़ें:


अब हमारे पास एक विरल पोस्ट और कमेंट व्यू है। ब्लॉग पर पोस्ट करने के लिए एक इनबाउंड ईमेल सेट करें:


यह ApplicationMailbox जनरेट करेगा। हम एक रूट सेट अप करेंगे ताकि blog@ के लिए कुछ भी हमारे Post Mailbox पर जाए और एक पोस्ट बनाए।


आप इसे जल्दी से https://localhost:3000/rails/conductor/action_mailbox/inbound_emails पर जाकर और अपनी सर्विस पर कुछ ईमेल भेजकर टेस्ट कर सकते हैं। यदि आप blog@whatever.com पर कुछ भेजते हैं, तो ईमेल को हमारे ऐप पर एक इनबॉक्स में डिलीवर किया जाना चाहिए। यदि आप किसी अन्य पते पर ईमेल करते हैं, तो मैसेज बाउंस होगा।

Post Mailbox के साथ ईमेल प्राप्त करें

आइए Post Mailbox को ईमेल प्राप्त करने और ब्लॉग पर पोस्ट करने के लिए सेट अप करें। प्रत्येक Mailbox की मूल inbound_email और mail ऑब्जेक्ट्स तक पहुंच होती है। InboundEmail रेल्स में उपयोग की जाने वाली mail क्लास के चारों ओर एक रैपर है।

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


अपने ब्लॉग पते पर एक और ईमेल भेजें और फिर इंडेक्स पेज को रिफ्रेश करें। आपको पोस्ट दिखाई देनी चाहिए!

अब पोस्ट के लिए कमेंट्स जोड़ने के लिए। सबसे पहले, किसी भी ईमेल कमेंटर को ईमेल भेजते समय सही पोस्ट का उल्लेख करना होगा। ऐसा करने का एक सरल तरीका इनबाउंड ईमेल पते में पोस्ट आईडी को एन्कोड करना है (जैसे comment+123@whatever.com, जहां ईमेल पते में 123 एक Post एलिमेंट को संदर्भित करता है)।

CommentMailbox जनरेट करें:


Action Mailbox में एक रूट जोड़ें ताकि comment+123 वाले किसी भी ईमेल को CommentMailbox पर भेजा जाए:


_post.html.erb में, ईमेल पता जनरेट करने के लिए एक लिंक जोड़ें, ताकि कोई अपना ईमेल ऐप खोल सके और ईमेल भेज सके:


आने वाला ईमेल CommentMailbox पर रूट किया जाएगा और सही ब्लॉग पोस्ट से जुड़े एक कमेंट में पार्स किया जाएगा।


process मेथड ईमेल बॉडी और सेंडर ईमेल से एक कमेंट बनाता है। यह post मेथड में क्वेरी किए गए Post को संदर्भित करता है। यह मेथड पहले प्राप्तकर्ता का ईमेल पता प्राप्त करता है और पोस्ट आईडी को निकालने के लिए एक रेगुलर एक्सप्रेशन का उपयोग करता है।

यदि Post मौजूद नहीं है या टोकन पार्स नहीं किया जा सकता है, तो ईमेल बाउंस होता है, जो प्रोसेसिंग को रोक देता है।

अब रेल्स कंडक्टर फॉर्म पर जाएं और प्रत्येक पोस्ट के पते पर एक कमेंट भेजें। कमेंट इंडेक्स पेज पर पोस्ट के नीचे दिखाई देगा!

Action Mailbox का उपयोग करके एक अधिक जटिल उदाहरण

ईमेल वास्तव में जटिल हैं। कल्पना करें कि आपके पास एक एप्लिकेशन मॉनिटरिंग टूल सेट अप है, आप अपने ऐप पर ऐसा कुछ डेप्लॉय करते हैं, और आप अपने APM डैशबोर्ड में एरर देखना शुरू करते हैं।

आप एक पार्सिंग एरर देख सकते हैं, या कि पोस्ट/कमेंट्स में बहुत सारे अजीब फॉर्मेटिंग एरर हैं।

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

आइए CommentMailbox और PostMailbox को मल्टीपार्ट ईमेल की जांच करने और HTML भाग को निकालने के लिए बदलें, यदि वह एकमात्र चीज बची है तो टेक्स्ट पर वापस गिरें।

प्रत्येक ईमेल में या तो कोई भाग नहीं होता या कई भाग होते हैं। पसंदीदा क्रम यह देखना है कि क्या कोई HTML भाग है और उसका उपयोग करें, और यदि नहीं, तो टेक्स्ट भाग को प्राप्त करने और उपयोग करने का प्रयास करें। यदि पार्स्ड HTML या टेक्स्ट सेक्शन नहीं हैं, तो हम पहले की तरह ईमेल बॉडी का उपयोग करेंगे।

PostMailbox अब थोड़ा अधिक जटिल है:


CommentMailbox में भी एक अलग process मेथड है:


अब हम किसी के फोन से आने वाले ईमेल को संभाल सकते हैं।

अपने रेल्स ऐप में Action Mailbox जोड़ना

Action Mailbox के लिए धन्यवाद, हम ईमेल को अपने रेल्स ऐप के लिए एक और I/O एवेन्यू के रूप में मान सकते हैं। हम वैचारिक संपीड़न का उपयोग करके ईमेल सर्विस प्रोवाइडर्स से स्वतंत्र कोड लिख सकते हैं। मैं न्यूनतम काम के साथ ईमेल प्रोवाइडर्स को स्थानांतरित करने में सक्षम हूं क्योंकि मुझे अंतर्निहित इंफ्रास्ट्रक्चर के बारे में चिंता करने की आवश्यकता नहीं है।

AppSignal जैसे APM टूल्स आपके सभी आउटगोइंग ActionMailers की निगरानी के लिए एक सुविधाजनक डैशबोर्ड भी प्रदान करते हैं और डिलीवरेबिलिटी पर नजर रखते हैं।

यहां एक उदाहरण है, जो मेरे ऐप्स में से एक को दिखाता है जो बहुत सारे ईमेल भेजता और प्राप्त करता है:

रेल्स एक्शन मेलबॉक्स के साथ इनबाउंड ईमेल इंटीग्रेशन और ट्रबलशूटिंग में मास्टरी

यह आपको आपके ऐप के अंदर क्या हो रहा है इसकी अधिक दृश्यता देता है।

समापन

इस पोस्ट में, हमने पहले रेल्स के लिए Action Mailer की क्षमताओं को परिभाषित किया। फिर हमने एक डेमो प्रोजेक्ट सेट अप किया जहां हमने इनबाउंड ईमेल को इंटीग्रेट किया और उन्हें ब्लॉग के लिए पोस्ट बनाने के लिए पार्स किया।

मुझे आशा है कि आपने इसे उपयोगी पाया। हैप्पी कोडिंग!

P.S. यदि आप प्रेस से बाहर आते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और कभी भी एक भी पोस्ट मिस न करें!

रेल्स एक्शन मेलबॉक्स के साथ इनबाउंड ईमेल इंटीग्रेशन और ट्रबलशूटिंग में मास्टरी

John Beatty

हमारे गेस्ट लेखक John ने 2010 में iPhone ऐप्स के लिए APIs बनाने के लिए रेल्स सीखा, और उन्होंने पीछे मुड़कर नहीं देखा। वे वर्तमान में हाई स्कूल के छात्रों को प्रोग्रामिंग सिखाते हैं, स्कूल के लिए कस्टम सॉफ्टवेयर बनाते हैं, और ब्लॉग करते हैं।

John Beatty के सभी लेख

  1. Python Matplotlib में बार प्लॉट के बार्स के ऊपर टेक्स्ट कैसे लिखें? Python Matplotlib में बार प्लॉट के बार्स के ऊपर टेक्स्ट कैसे लिखें?

    बार प्लॉट के प्रत्येक बार के ऊपर उसका मान दिखाने के लिए पैचेज़ को इन्यूमरेट करके ax.text() का उपयोग करें। चरण फिगर साइज़ और ऑटोलेआउट सेट करें। वर्ष, जनसंख्या डेटा और x पोजीशन ऐरे बनाएं। ax.bar() से बार्स प्लॉट करें और पैचेज़ प्राप्त करें। प्रत्येक पैच के लिए get_height(), get_x(), get_width() से पो

  1. एंड्रॉइड SQLite में WHERE क्लॉज और IN ऑपरेटर का उपयोग करके डेटा कैसे फ़िल्टर करें? एंड्रॉइड SQLite में WHERE क्लॉज और IN ऑपरेटर का उपयोग करके डेटा कैसे फ़िल्टर करें?

    एंड्रॉइड SQLite में IN ऑपरेटर का उपयोग यह ट्यूटोरियल IN ऑपरेटर का उपयोग करके मानों की सूची के विरुद्ध डेटा फ़िल्टर करने का तरीका दिखाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट फ़ाइल (activity_main.xml) <?xml version=1.0 encoding=utf-8?> <Li

  1. Django में अपने खुद के कस्टम फिल्टर टैग बनाना Django में अपने खुद के कस्टम फिल्टर टैग बनाना

    फिल्टर्स वास्तव में बहुत उपयोगी होते हैं, Django में कई बिल्ट-इन फिल्टर्स हैं। हम Django में अपने खुद के फिल्टर्स भी बना सकते हैं जिन्हें हम किसी भी टेम्पलेट फाइल में Django प्रोजेक्ट्स में उपयोग कर सकते हैं। फिल्टर्स का उपयोग कई तरीकों से किया जाता है जैसे HTML में लोअरकेस को अपरकेस में बदलना। इस