কম্পিউটার টিউটোরিয়াল

যেকোনো Rack অ্যাপ্লিকেশনে ইনকামিং ইমেইল সিমলেসলি প্রসেস করুন

তবু আপনার ক্লায়েন্ট শুধু কল করল...

সে তার অ্যাপে ইনকামিং ইমেইল হ্যান্ডেল করতে চায়। ঠিক Basecamp-এর মত।

কোনো সমস্যা নেই, আপনি ভাবলেন, অনেক সার্ভিস ইমেইল পাঠাবে POST দিয়ে আপনার অ্যাপে। সহজ হবে। ঠিক?

নहीं।

প্রতিটি সার্ভিস একটি প্রপ্রায়েটারি ফরম্যাট ব্যবহার করে। কিছু আপনাকে পার্সড ইমেইল পাঠায়, কিছু র raw পাঠায়। কিছু অথেনটিকেশন সিগনেচার পাঠায়। কিছু পাঠায় না।

এটা ভালো হত না যদি আপনি এই অংশটি স্কিপ করতে পারতেন, এবং স্ট্যান্ডার্ড (হায়েন-নোন) ruby অবজেক্টের সাথে কাজ করতে পারতেন?

এটা ভালো হত না যদি আপনি ভেন্ডার চেঞ্জ করতে পারতেন...আপনার কোড রিরাইট ছাড়া?

আপনি যদি Incoming! ব্যবহার করেন, আপনি পারবেন।

TL;DR

Incoming! একটি Rack::Request নেয় এবং আপনাকে একটি Mail::Message দেয়

সাপোর্টেড সার্ভিসেস

Incoming এই চমৎকার সার্ভিসগুলো সাপোর্ট করে:

  1. SendGrid

  2. Mailgun

  3. Postmark

  4. CloudMailin

  5. আসল মেইল সার্ভার যেগুলো আপনি নিজে চালান (ওয়াও)

সবচেয়ে ভালো হলো, এটি এক্সটেন্ড করা সহজ। তাই এটি ইতিমধ্যে কম্প্যাটিবল সার্ভিসের সাথে যেগুলো এখনো অস্তিত্বে আসেনি! (নয় সত্যিই, কিন্তু একটু))

তাহলে আমি কেন ইনবাউন্ড ইমেইল চাই?

লোকেদের একটি অপশন দিয়ে কিছু করার জন্য আপনাকে ইমেইল পাঠাতে বলা সেগুলো তাদের করতে বেশি 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! অনন্য। এটি:

  1. একাধিক মেইল সার্ভিস সাপোর্ট করে

  2. যেকোনো rack অ্যাপ্লিকেশনের সাথে কাজ করে, শুধু rails নয়

  3. আপনাকে একটি স্ট্যান্ডার্ড Mail::Message দেয়

  4. আপনার ইউজ কেস সম্পর্কে কোনো অনুমান করে না

আপনার জন্য একটি মেমে পিক আছে কি?

হ্যাঁ, হ্যাঁ আছে।

যেকোনো Rack অ্যাপ্লিকেশনে ইনকামিং ইমেইল সিমলেসলি প্রসেস করুন

  1. আইফোনে যেকোনো ইমেইল ঠিকানা যোগ করার পূর্ণ নির্দেশিকা

  2. যেকোনো ইমেল অ্যাপে Yahoo Mail পড়ার পদ্ধতি

  3. Vue.js-এ EmailJS ব্যবহার করে কন্ট্যাক্ট ফর্ম ইমেল পাঠান: ধাপে ধাপে গাইড

  4. যেকোনো আইফোন বা অ্যান্ড্রয়েড ফটোতে ডেপথ-অফ-ফিল্ড (ব্লার ব্যাকগ্রাউন্ড) ইফেক্ট যোগ করুন