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

রেল অ্যাকশন মেলবক্সের সাথে ইনবাউন্ড ইমেল ইন্টিগ্রেশন এবং সমস্যা সমাধানে দক্ষতা অর্জন করা

আপনি যদি কখনও ইমেল পাঠানো এবং গ্রহণ করার বিষয়ে মন্তব্যের জন্য অনুরোধ (RFCs) দেখে থাকেন, তাহলে আপনি আপনার ইমেল ইনবক্সে পাঠাতে আঘাত করার সময় জড়িত প্রযুক্তিগত জটিলতাগুলি দেখতে পাবেন।

সৌভাগ্যবশত, অনেক বিদ্যমান টুল আমাদের ডেভেলপারদের জন্য সিম্পল মেল ট্রান্সফার প্রোটোকল (SMTP) পরিষেবা প্রদান করে — একটি পোস্টফিক্স সার্ভার থেকে যা আপনি পরিচালনা করেন সেন্ডগ্রিড, অ্যামাজন এসইএস বা পোস্টমার্কের মতো একটি সম্পূর্ণ স্কেলযোগ্য পাঠানো পরিষেবাতে। যাইহোক, সরবরাহযোগ্যতা বা মূল্যের কারণে প্রদানকারীদের মধ্যে স্থানান্তরিত হওয়ার অর্থ হল প্রতিটি পরিষেবার বিশেষত্ব পূরণের জন্য আমাদের অ্যাপগুলিকে পুনর্লিখন বা রিফ্যাক্টর করা৷

Rails এখানে অ্যাকশন মেলবক্স প্রদান করে আমাদের সাহায্য করে। এই পোস্টে, ইনবাউন্ড ইমেলগুলিকে একীভূত করতে এবং সমস্যা সমাধানের জন্য আপনি কীভাবে অ্যাকশন মেলবক্স ব্যবহার করতে পারেন তা আমরা দেখব৷

কিন্তু প্রথমে, আসুন দ্রুত সংজ্ঞায়িত করি অ্যাকশন মেলবক্স কী৷

রেলের জন্য অ্যাকশন মেলবক্স কী?

অ্যাকশন মেলবক্স রুবি অন রেল-এ ইমেল পাওয়ার জন্য ধারণাগত কম্প্রেশন ব্যবহার করে। ধারণাগত কম্প্রেশন মানে এটি প্রতিটি SMTP পরিষেবার মধ্যে সমস্ত ছোট পার্থক্যকে এনক্যাপসুলেট করে এবং আপনার ইনবাউন্ড প্রসেসিং কোড একবার লিখে। এমনকি আপনি একটি নতুন পরিষেবার জন্য একটি প্রদানকারী লিখতে পারেন৷

অ্যাকশনমেলবক্সের মূল ধারণাটি ইমেল প্রাপকদের উপর ভিত্তি করে রাউটিং। একটি ইনবাউন্ড ইমেল প্রদানকারী সেট আপ করে, একটি ডোমেনে যাওয়া মেল আপনার অ্যাপে রুট করা হবে৷ প্রতিটি মেল বার্তা কীভাবে প্রক্রিয়া করা উচিত তা নির্ধারণ করতে আপনি প্রাপকের ঠিকানা দেখতে পারেন।

আপনি যদি রেল কন্ডাক্টর অ্যাকশনের মধ্য দিয়ে যান একটি পরীক্ষার ইমেল পাঠাতে, যেমনটি আমি এখানে করেছি:

রেল অ্যাকশন মেলবক্সের সাথে ইনবাউন্ড ইমেল ইন্টিগ্রেশন এবং সমস্যা সমাধানে দক্ষতা অর্জন করা

তারপর আপনার ইনবাউন্ড ইমেলে To থেকে প্রাপক থাকবে , CC , BCC , এবং X-Original-To ক্ষেত্র।

 

প্রতিটি ঠিকানা কোথায় রাউট করা হবে তা নির্ধারণ করার জন্য পরীক্ষা করা হয়, কিন্তু মেল বার্তা শুধুমাত্র একবার রাউট করা হয়৷

বিকাশের একটি মূল দিক আসলে আপনার সিস্টেম থেকে ইমেল পরীক্ষা করা। রেলের /rails/conductor/ রুটের অধীনে উন্নয়ন পৃষ্ঠাগুলির একটি সেট রয়েছে যা আপনাকে আপনার ডেভেলপমেন্ট সেটআপে স্থানীয়ভাবে ইমেল ইনপুট করতে দেয়।

আপনি ম্যানুয়ালি ইমেল লিখতে পারেন, যেমন আমি উপরের উদাহরণে করেছি, অথবা আপনি সমস্ত শিরোনাম সহ সম্পূর্ণ একটি ইমেল আপলোড করতে পারেন।

একটি সম্পূর্ণ ইমেল পাওয়ার একটি দুর্দান্ত উপায় (শিরোনাম, একটি বার্তার অংশ এবং সংযুক্তি সহ) থান্ডারবার্ডের মতো একটি ইমেল ক্লায়েন্ট ব্যবহার করা। একটি .eml এ পৃথক ইমেল সংরক্ষণ করুন , একটি টেক্সট এডিটর দিয়ে ফাইলটি খুলুন এবং সম্পূর্ণ বিষয়বস্তু কন্ডাক্টর পেজে কপি করুন।

এখন আপনি আরও জটিল ইমেল প্রক্রিয়াকরণ পরীক্ষা করতে পারেন৷

একটি রেল অ্যাপের জন্য ডেমো পোস্ট এবং মন্তব্য করা

এই সব কিভাবে কাজ করে তা দেখানোর জন্য আসুন একটি ছোট ডেমো একসাথে রাখি। আমি 37 সিগন্যালের একজন মহান ভক্ত, এবং আমি বিশেষ করে হে ওয়ার্ল্ডের সাথে তাদের ব্লগিং পছন্দ করি। কিন্তু তারা মন্তব্যের অনুমতি দেয় না, তাই আসুন একটি ক্লোন তৈরি করি যাতে প্রতিটি ব্লগ পোস্টের জন্য মন্তব্য অন্তর্ভুক্ত থাকে।

এই পোস্টে কোড সহ অনুসরণ করুন।

একটি নতুন অ্যাপ তৈরি করুন (আমি টেইলউইন্ড সিএসএস ব্যবহার করছি, তবে আপনি যা বুঝতে পারবেন তা বেছে নিতে পারেন)। আমি Post-এর জন্য অ্যাকশন টেক্সটও যোগ করব এবং Comment মডেল।

 

ভারা আমাদের পোস্ট এবং মন্তব্য দেখতে একটি দ্রুত উপায় দেয়. post.rb-এ অ্যাসোসিয়েশন যোগ করুন , এবং পোস্টটি সম্পর্কিত মন্তব্য প্রদর্শন করবে:

 

posts/_post.html.erb-এ , আসুন আংশিক মন্তব্য যোগ করি:

 

আমরা এখন একটি বিক্ষিপ্ত পোস্ট এবং মন্তব্য দৃশ্য আছে. ব্লগে পোস্ট করার জন্য একটি অন্তর্মুখী ইমেল সেট আপ করুন:

 

এটি ApplicationMailbox তৈরি করবে . আমরা একটি রুট সেট আপ করব যাতে blog@-এর জন্য কিছু আমাদের পোস্ট মেলবক্সে যায় এবং একটি পোস্ট তৈরি করে৷

 

আপনি http://localhost:3000/rails/conductor/action_mailbox/inbound_emails এ গিয়ে এটি দ্রুত পরীক্ষা করতে পারেন এবং আপনার পরিষেবাতে কিছু ইমেল পাঠানো হচ্ছে। আপনি যদি blog@whatever.com এ কিছু পাঠান , ইমেলটি আমাদের অ্যাপের একটি ইনবক্সে বিতরণ করা উচিত। আপনি যদি অন্য কোন ঠিকানা ইমেল করেন, বার্তাটি বাউন্স হবে৷

পোস্ট মেলবক্স সহ ইমেল পান

ইমেলটি পেতে এবং ব্লগে পোস্ট করতে পোস্ট মেলবক্স সেট আপ করুন। প্রতিটি মেলবক্সের আসল inbound_email অ্যাক্সেস আছে এবং mail বস্তু InboundEmail হল mail এর চারপাশে একটি মোড়ক রেল জুড়ে ব্যবহৃত ক্লাস।

আমাদের উদ্দেশ্যের জন্য, আমরা ইমেলটি কার কাছ থেকে এসেছে, এর বিষয় এবং এর বডি কপি নিয়ে আগ্রহী। আমরা এগুলো বের করে একটি Post তৈরি করতে পারি রেকর্ড যা আমাদের ব্লগের প্রথম পৃষ্ঠায় প্রদর্শিত হবে।

 

আপনার ব্লগ ঠিকানায় আরেকটি ইমেল পাঠান এবং তারপর ইনডেক্স পৃষ্ঠাটি রিফ্রেশ করুন। আপনার পোস্টটি দেখা উচিত!

এখন একটি পোস্টের জন্য মন্তব্য যোগ করতে. প্রথমত, যে কোনো ইমেল মন্তব্যকারীকে একটি ইমেল পাঠানোর সময় সঠিক পোস্টটি উল্লেখ করতে হবে। এটি করার একটি সহজ উপায় হল ইনবাউন্ড ইমেল ঠিকানাতে পোস্ট আইডি এনকোড করা (যেমন comment+123@whatever.com , যেখানে ইমেল ঠিকানায় 123 একটি পোস্ট উপাদানকে বোঝায়)।

CommentMailbox তৈরি করুন :

 

comment+123 দিয়ে যেকোনো ইমেল পাঠাতে অ্যাকশন মেলবক্সে একটি রুট যোগ করুন CommentMailbox-এ :

 

_post.html.erb-এ , ইমেল ঠিকানা তৈরি করতে একটি লিঙ্ক যোগ করুন, যাতে কেউ তাদের ইমেল অ্যাপ খুলতে পারে এবং একটি ইমেল পাঠাতে পারে:

 

আগত ইমেলটি CommentMailbox-এ পাঠানো হবে এবং সঠিক ব্লগ পোস্টের সাথে সংযুক্ত একটি মন্তব্যে পার্স করা হয়েছে।

 

process পদ্ধতি ইমেল বডি এবং প্রেরকের ইমেল থেকে একটি মন্তব্য তৈরি করে। এটি Post উল্লেখ করে post-এ জিজ্ঞাসা করা হয়েছে পদ্ধতি এই পদ্ধতিটি প্রথম প্রাপকের ইমেল ঠিকানা পায় এবং পোস্ট আইডি বের করতে একটি নিয়মিত অভিব্যক্তি ব্যবহার করে।

যদি Post বিদ্যমান নেই বা একটি টোকেন পার্স করা যাবে না, ইমেল বাউন্স হয়, যা প্রক্রিয়াকরণ বন্ধ করে দেয়।

এখন রেল কন্ডাক্টর ফর্মে যান এবং প্রতিটি পোস্টের ঠিকানায় একটি মন্তব্য পাঠান। মন্তব্যটি ইনডেক্স পৃষ্ঠায় পোস্টের নীচে প্রদর্শিত হবে!

অ্যাকশন মেলবক্স ব্যবহার করে আরও জটিল উদাহরণ

ইমেল আসলে সত্যিই জটিল. কল্পনা করুন যে আপনি একটি অ্যাপ্লিকেশন মনিটরিং টুল সেট আপ করেছেন, আপনি আপনার অ্যাপে এরকম কিছু স্থাপন করেন এবং আপনি আপনার APM ড্যাশবোর্ডে ত্রুটি দেখতে শুরু করেন৷

আপনি একটি পার্সিং ত্রুটি দেখতে পারেন, অথবা পোস্ট/মন্তব্যে অনেক অদ্ভুত ফর্ম্যাটিং ত্রুটি রয়েছে৷

আপনার অ্যাপটি এইচটিএমএল ইমেল পায় এবং আপনি রও বডি সোর্সটি নিয়ে ওয়েবসাইটে পোস্ট করেন। মেইল রত্ন আমাদের দেখতে দেয় যে ইনকামিং ইমেলের একটি HTML বডি আছে কিনা, এবং আমরা আমাদের প্রয়োজনীয় বার্তা থেকে যা কিছু অংশ টেনে আনতে পারি।

চলুন CommentMailbox পরিবর্তন করি এবং PostMailbox মাল্টিপার্ট ইমেল চেক করতে এবং এইচটিএমএল অংশটি বের করতে, যদি এটিই বাকি থাকে তবে টেক্সটে ফিরে আসা।

প্রতিটি ইমেলের হয় কোন অংশ বা একাধিক অংশ নেই। পছন্দের ক্রম হল এইচটিএমএল পার্ট আছে কিনা তা দেখা এবং ব্যবহার করা এবং যদি না থাকে তবে টেক্সট অংশটি পেতে এবং ব্যবহার করার চেষ্টা করুন। যদি পার্স করা এইচটিএমএল বা টেক্সট বিভাগ না থাকে, তাহলে আমরা ইমেলের বডি আগের মতোই ব্যবহার করব।

PostMailbox এখন একটু বেশি জটিল:

 

CommentMailbox এছাড়াও একটি ভিন্ন প্রক্রিয়া পদ্ধতি আছে:

 

এখন আমরা কারও ফোন থেকে আসা ইমেলগুলি পরিচালনা করতে পারি।

আপনার রেল অ্যাপে অ্যাকশন মেলবক্স যোগ করা হচ্ছে

অ্যাকশন মেলবক্সকে ধন্যবাদ, আমরা আমাদের রেল অ্যাপের জন্য ইমেলগুলিকে অন্য I/O পথ হিসাবে বিবেচনা করতে পারি। আমরা ধারণাগত কম্প্রেশন ব্যবহার করে ইমেল পরিষেবা প্রদানকারীদের থেকে স্বাধীন কোড লিখতে পারি। আমি এমনকি ন্যূনতম কাজের সাথে ইমেল প্রদানকারীদের স্থানান্তর করতে সক্ষম হয়েছি যেহেতু আমাকে অন্তর্নিহিত পরিকাঠামো নিয়ে চিন্তা করতে হবে না৷

AppSignal-এর মতো APM টুলগুলিও আপনার সমস্ত বহির্গামী অ্যাকশনমেলার নিরীক্ষণ করতে এবং ডেলিভারিবিলিটির উপর নজর রাখতে একটি সুবিধাজনক ড্যাশবোর্ড প্রদান করে৷

এখানে একটি উদাহরণ, আমার একটি অ্যাপ দেখানো হচ্ছে যা প্রচুর ইমেল পাঠায় এবং গ্রহণ করে:

রেল অ্যাকশন মেলবক্সের সাথে ইনবাউন্ড ইমেল ইন্টিগ্রেশন এবং সমস্যা সমাধানে দক্ষতা অর্জন করা

এটি আপনাকে আপনার অ্যাপের ভিতরে কী ঘটছে তার আরও দৃশ্যমানতা দেয়।

র্যাপিং আপ

এই পোস্টে, আমরা প্রথমে রেলের জন্য অ্যাকশন মেইলারের ক্ষমতা সংজ্ঞায়িত করেছি। তারপরে আমরা একটি ডেমো প্রকল্প সেট আপ করেছি যেখানে আমরা অন্তর্মুখী ইমেলগুলিকে একীভূত করেছি এবং একটি ব্লগের জন্য পোস্ট তৈরি করতে সেগুলিকে পার্স করেছি৷

আমি আশা করি আপনি এটি দরকারী খুঁজে পেয়েছেন. শুভ কোডিং!

পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!

রেল অ্যাকশন মেলবক্সের সাথে ইনবাউন্ড ইমেল ইন্টিগ্রেশন এবং সমস্যা সমাধানে দক্ষতা অর্জন করা

জন বিটি

আমাদের অতিথি লেখক জন 2010 সালে আইফোন অ্যাপের জন্য API তৈরি করতে Rails শিখেছিলেন, এবং তিনি পিছনে ফিরে তাকাননি। তিনি বর্তমানে উচ্চ বিদ্যালয়ের শিক্ষার্থীদের প্রোগ্রামিং শেখান, স্কুলের জন্য কাস্টম সফ্টওয়্যার তৈরি করেন এবং ব্লগগুলি তৈরি করেন৷

জন বিটি দ্বারা সমস্ত নিবন্ধ


  1. HTML <head> ট্যাগ

  2. কিভাবে Matplotlib একটি পান্ডাস ডেটাফ্রেমে একটি সূচক মান হিসাবে একটি সময় প্লট করবেন?

  3. C++ এ কম্পোজিট ডিজাইন প্যাটার্ন

  4. মাইএসকিউএল-এ ডেটটাইম ফিল্ড থেকে শুধুমাত্র তারিখ বের করে পিএইচপি ভেরিয়েবলে বরাদ্দ করা হচ্ছে?