তবু আপনার ক্লায়েন্ট শুধু কল করল...
সে তার অ্যাপে ইনকামিং ইমেইল হ্যান্ডেল করতে চায়। ঠিক Basecamp-এর মত।
কোনো সমস্যা নেই, আপনি ভাবলেন, অনেক সার্ভিস ইমেইল পাঠাবে POST দিয়ে আপনার অ্যাপে। সহজ হবে। ঠিক?
নहीं।
প্রতিটি সার্ভিস একটি প্রপ্রায়েটারি ফরম্যাট ব্যবহার করে। কিছু আপনাকে পার্সড ইমেইল পাঠায়, কিছু র raw পাঠায়। কিছু অথেনটিকেশন সিগনেচার পাঠায়। কিছু পাঠায় না।
এটা ভালো হত না যদি আপনি এই অংশটি স্কিপ করতে পারতেন, এবং স্ট্যান্ডার্ড (হায়েন-নোন) ruby অবজেক্টের সাথে কাজ করতে পারতেন?
এটা ভালো হত না যদি আপনি ভেন্ডার চেঞ্জ করতে পারতেন...আপনার কোড রিরাইট ছাড়া?
আপনি যদি Incoming! ব্যবহার করেন, আপনি পারবেন।
TL;DR
Incoming! একটি Rack::Request নেয় এবং আপনাকে একটি Mail::Message দেয়
সাপোর্টেড সার্ভিসেস
Incoming এই চমৎকার সার্ভিসগুলো সাপোর্ট করে:
SendGrid
Mailgun
Postmark
CloudMailin
আসল মেইল সার্ভার যেগুলো আপনি নিজে চালান (ওয়াও)
সবচেয়ে ভালো হলো, এটি এক্সটেন্ড করা সহজ। তাই এটি ইতিমধ্যে কম্প্যাটিবল সার্ভিসের সাথে যেগুলো এখনো অস্তিত্বে আসেনি! (নয় সত্যিই, কিন্তু একটু))
তাহলে আমি কেন ইনবাউন্ড ইমেইল চাই?
লোকেদের একটি অপশন দিয়ে কিছু করার জন্য আপনাকে ইমেইল পাঠাতে বলা সেগুলো তাদের করতে বেশি lielikely করে।
আমরা 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! ব্যবহার করা ঠিক ততটুকুই সহজ। আসুন একটি স্যাম্পল অ্যাপ বিল্ড করি।
প্রয়োজন: আমি টেক্সটিং ঘৃণা করি। এটি শুধু আমার একটি পeeve। কিন্তু আমাকে লভ নোটস পাঠাতে হবে আমার মঙ্গেতরের কাছে যখন সে ক্লাসে আছে।
জाहিরভাবে, উত্তর হলো একটি ইমেইল-টু-এসএমএস ব্রিজ বিল্ড করা!
প্রথম, আমরা আমাদের ইমেইল রিসিভার সেট আপ করি:
`# 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)
# Insert twilio magic here
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দেয়আপনার ইউজ কেস সম্পর্কে কোনো অনুমান করে না
আপনার জন্য একটি মেমে পিক আছে কি?
হ্যাঁ, হ্যাঁ আছে।
