तो आपका क्लाइंट अभी कॉल किया...
वह चाहता है कि उसका ऐप इनकमिंग ईमेल को संभाले। बिल्कुल Basecamp की तरह।
कोई समस्या नहीं, आप सोचते हैं, बहुत सारी सेवाएं आपको ईमेल को POST द्वारा आपके ऐप पर भेजेंगी। आसान होना चाहिए। है ना?
नहीं।
प्रत्येक सेवा एक मालिकाना प्रारूप का उपयोग करती है। कुछ आपको पार्स्ड ईमेल भेजते हैं, कुछ इसे रॉ भेजते हैं। कुछ एक प्रमाणीकरण हस्ताक्षर भेजते हैं। कुछ नहीं भेजते।
क्या यह अच्छा नहीं होगा यदि आप इस भाग को छोड़ सकें, और मानक (प्रसिद्ध) Ruby ऑब्जेक्ट्स के साथ काम कर सकें?
क्या यह अच्छा नहीं होगा यदि आप विक्रेताओं को बदल सकें... बिना अपना कोड रीराइट किए?
यदि आप Incoming! का उपयोग कर रहे हैं, तो आप कर सकते हैं।
TL;DR
Incoming! एक Rack::Request लेता है और आपको एक Mail::Message देता है
समर्थित सेवाएं
Incoming इन शानदार सेवाओं का समर्थन करता है:
SendGrid
Mailgun
Postmark
CloudMailin
वास्तविक मेल सर्वर जो आप स्वयं चलाते हैं (वाह)
सबसे अच्छी बात यह है कि इसे बढ़ाना आसान है। इसलिए यह पहले से ही उन सेवाओं के साथ संगत है जो अभी तक मौजूद भी नहीं हैं! (नहीं वास्तव में, लेकिन तरह का)
तो मुझे इनबाउंड ईमेल क्यों चाहिए?
लोगों को आपको ईमेल भेजकर कुछ करने का विकल्प देना उन्हें ऐसा करने की अधिक संभावना बनाता है।
हमने Incoming! को honeybadger.io के लिए बनाया। हमें त्रुटियों के बारे में चर्चा को सुव्यवस्थित करने का एक तरीका चाहिए था। उदाहरण के लिए, आप केवल अधिसूचना का जवाब देकर किसी भी त्रुटि पर टिप्पणी कर सकते हैं। हमारी अधिकांश टिप्पणियां इस तरह से आती हैं, इसलिए हम इसे एक बड़ी जीत मानते हैं।
इस लेखन के अनुसार, जेम का उपयोग आंतरिक रूप से Honeybadger टीम द्वारा लगभग छह महीने से किया जा रहा है।
मुझे कोड दिखाओ!
यहां CloudMailin का उपयोग करके एक सरल उदाहरण है।
`# पहले, आप एक ईमेल रिसीवर क्लास परिभाषित करते हैं
class EmailReceiver < Incoming::Strategies::CloudMailin
def receive(mail)
puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
end
end
# फिर आप इसे एक Rack::Request ऑब्जेक्ट खिलाते हैं। और आपका काम हो गया।
req = Rack::Request.new(env)
result = EmailReceiver.receive(req)
# => Got message from whoever@wherever.com with subject "hello world" `
अधिक विवरण के लिए, Readme देखें।
लेकिन आप इसे Rails में कैसे उपयोग करते हैं?
Rails में Incoming! का उपयोग करना उतना ही आसान है। आइए एक नमूना ऐप बनाएं।
आवश्यकता: मुझे टेक्स्टिंग से नफरत है। यह मेरा एक पालतू झुंझलाहट है। लेकिन मुझे अपनी मंगेतर को क्लास में रहते हुए लव नोट्स भेजने में सक्षम होने की आवश्यकता है।
जाहिर है, जवाब एक ईमेल-टू-SMS ब्रिज बनाना है!
सबसे पहले, हम अपना ईमेल रिसीवर सेटअप करते हैं:
`# app/email_receivers/incoming.rb
class EmailToSmsReceiver < Incoming::Strategies::Postmark
def receive(mail)
send_sms([mail.subject, mail.body].join(": "))
end
private
def send_sms(message)
# यहां ट्विलियो मैजिक डालें
end
end `
दूसरा, हम अपने रिसीवर में अनुरोधों को पाइप करने के लिए एक कंट्रोलर जोड़ते हैं:
`# app/controllers/emails_controller.rb
class EmailsController < ActionController::Base
def create
if EmailToSmsReceiver.receive(request)
render json: { status: 'ok' }
else
render json: { status: 'rejected' }, status: 403
end
end
end `
ओह हां, हमें एक रूट चाहिए:
`# config/routes.rb
Rails.application.routes.draw do
post '/emails' => 'emails#create'
end `
बस इतना ही।
Incoming! अन्य जेम्स के साथ कैसे तुलना करता है?
इस क्षेत्र में अन्य जेम्स हैं। विशेष रूप से Thoughtbot का Griddler।
हालांकि कुछ स्थान हैं जहां Incoming! खड़ा होता है। यह:
कई मेल सेवाओं का समर्थन करता है
किसी भी Rack एप्लिकेशन के साथ काम करता है, न कि केवल Rails
आपको एक मानक
Mail::Messageदेता हैआपके उपयोग के मामले के बारे में धारणा नहीं बनाता
क्या आपके पास मेरे लिए एक मीम तस्वीर है?
हां, हां हमारे पास है।
