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

phpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুন

এখন আপনার কাছে একটি ফ্ল্যাট ফাইল সিস্টেম ব্যবহার করে ওয়েবসাইট আছে, এবং আপনি আপনার ইউজারদের কাছ থেকে ফিডব্যাক পেতে চান। ডিসকাস (Disqus) যোগ করা সহজ কারণ সেটি সম্পূর্ণ জাভাস্ক্রিপ্ট কোড পেজে যোগ করা হয়, কিন্তু আপনি সেটি চান না। আপনি চান যাতে তারা সরাসরি আপনাকে ইমেইল করতে পারে যাতে আপনি শুধু তাদের কাছে রিপ্লাই করতে পারেন।

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

এই টিউটোরিয়ালটি আপনার নতুন PressCMS (যथा phpPress, rubyPress, nodePress, এবং goPress)তে একটি ইমেইল মেসেজ সিস্টেম যোগ করার ওপর। আমি ফ্রন্ট-এন্ড থেকে শুরু করব এবং তারপর প্রতিটি সিস্টেমের জন্য ব্যাক-এন্ড নিয়ে আলোচনা করব। আমি অনুমান করছি আপনার সিস্টেমে ইতিমধ্যে এই সার্ভারগুলো আছে।

ব্রাউজারে ফর্ম তৈরি করা

যেহেতু ফ্রন্ট-এন্ড কোড প্রতিটি সার্ভারের জন্য একই, আপনাকে এই নতুন ফাইলগুলো প্রতিটি সার্ভার ডিরেক্টরিতে কপি করতে হবে। তাই আমি সার্ভার ডিরেক্টরি থেকে রেফারেন্স করা পথ অনুযায়ী ফাইলগুলো নিয়ে আলোচনা করব।

থিমে ফর্ম-স্পেসিফিক স্টাইলিং যোগ করার বদলে, এই ফর্ম স্ক্রিপ্টে সব কিছু এক জায়গায় আছে। questions.html ফাইলটি site/parts ডিরেক্টরিতে তৈরি করুন নিচের কন্টেন্ট সহ:

এটি একটি বেসিক ফর্ম তৈরি করে যা পুরো নাম (ফার্স্ট এবং লাস্ট নাম), ইমেইল, এবং একটি মেসেজ চায়। এই ফর্ম রেগুলার এক্সপ্রেশন ব্যবহার করে নিশ্চিত করে যে নাম এবং ইমেইল ঠিকানা বৈধ। যদি ইউজার যে ইনপুট দিয়েছে সেটি pattern ডিরেক্টিভের রেগুলার এক্সপ্রেশন সাথে মেলে না, তবে ফর্ম সাবমিট হবে না। একটি পপআপ ইউজাকে প্রপারলি ফিল্ডটি পূরণ করতে বলবে title প্যারামিটারের মেসেজ সহ। প্রতিটি ইনপুট ফিল্ডে required প্রিমিটিভও আছে। এটি খালি ফর্ম সাবমিট হতে দেয় না। এটি ফ্রন্ট-এন্ডে ব্যবহার করা যেতে পারে ন্যূনতম ডেটা ভ্যালিডেশন।

form এলিমেন্টে action ডিরেক্টিভ ব্রাউজারকে বলে ফর্ম ডেটা কোন ঠিকানায় সাবমিট করবে। method ডিরেক্টিভ ব্রাউজারকে বলে post মেথড হিসেবে পাঠাবে। ফর্ম ডেটা পোস্ট রিকোয়েস্টের URL-এ প্লেস হবে সার্ভারে। এটি একটি Query String। সার্ভার তারপর কুয়েরি স্ট্রিং-এ থাকা ইনফরমেশন প্রসেস করে।

site/pages ডিরেক্টরিতে, contact.md ফাইলটি তৈরি করুন এবং এই কোডটি রাখুন:

একবার সেভ করলে, আপনি সার্ভারে পেজগুলো ট্রাই করতে পারেন। আপনার ব্রাউজারে https://localhost:8081/contact পেজটি খুলুন।

phpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুনphpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুনphpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুন
Contact Form Page

Contact Us পেজটি উপরের ছবির মতো দেখাবে। লোড হয়তেই নাম ফিল্ড হাইলাইট হওয়া লক্ষ্য করুন। autofocus ডিরেক্টিভ এই আচরণ তৈরি করে। যেহেতু ইউজার প্রথমে যে ফিল্ডে টাইপ করবে সেটি আটোমেটিক্যালি ফোকাসড থাকা সবসময় ভালো ডিজাইন।

মেসেজ পাঠানোর পর ইউজারকে একটি কনফার্মেশন মেসেজ দিলে ভালো হতো। site/pages ডিরেক্টরিতে, messagesent.md ফাইলটি তৈরি করুন এবং এই কোডটি রাখুন:

শুধু একটি সিম্পল মেসেজ যাতে ইউজার বুঝতে পারে মেসেজটি সঠিকভাবে পাঠানো হয়েছে। আপনি ইচ্ছেমতো এক্সপ্যান্ড করতে পারেন।

phpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুনphpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুনphpPress, goPress, rubyPress, এবং nodePress দিয়ে সিকিউরলি ওয়েব ফর্ম প্রসেস করুন
Message Sent Confirmation Page

goPress দিয়ে ফর্ম প্রসেস করা

ইউজার দেওয়া মেসেজ স্যানিটাইজ (sanitize) করার জন্য আমি Blue Monday লাইব্রেরি ব্যবহার করছি। আপনার সিস্টেমে সেই লাইব্রেরি লোড করার জন্য এই কমান্ড লাইন চালান:

এটি আপনার প্রোগ্রামের জন্য লাইব্রেরি উপলব্ধ করাবে। এটিই একমাত্র নন-স্ট্যান্ডার্ড লাইব্রেরি যা দরকার।

goPressServer.go ফাইলটি খুলুন এবং import () স্টেটমেন্টের ভিতরে টপে এটি যোগ করুন:

সার্ভার থেকে ইমেইল পাঠানোর জন্য এই লাইব্রেরিগুলো দরকার। লাইনটি যেটিতে goPress.DefaultRoutes( ফাংশন কল আছে, তার পর এই কোডটি যোগ করুন:

এটি /api/message পোস্ট রুট সেট করে যা postMessage() ফাংশন চালাবে। ফাইলটির শেষে এই কোডটি যোগ করুন:

এই দুটি ফাংশন ব্রাউজার থেকে পাঠানো ইমেইল হ্যান্ডেল করার হ্যান্ডলার তৈরি করে। /api/message রুট postMessage() ফাংশনকে কল করে। এটি ইউজার দ্বারা ফর্মে পূরণ করা ইনফরমেশন রিট্রিভ করে, ব্লু ম্যান্ডে লাইব্রেরি দিয়ে মেসেজ স্যানিটাইজ করে, এবং সাইটের মালিককে sendEmail() ফাংশন ব্যবহার করে ইমেইল পাঠায়। আপনাকে <your email address> প্লেসহোল্ডারের জায়গায় আপনার জিমেইল ঠিকানা এবং <password> প্লেসহোল্ডারের জায়গায় পাসওয়ার্ড বসাতে হবে।

goPress.go ফাইলে, SetGetRoute() ফাংশনের পর এই ফাংশনটি যোগ করুন:

এই ফাংশনটি ঠিক SetGetRoute() ফাংশনের মতো। একমাত্র পার্থক্য হলো web.Post() ফাংশন ব্যবহার করা।

এই পরিবর্তনগুলোয়, আপনার goPress সার্ভার এখন ইউজার থেকে ইমেইল পাঠাতে পারবে।

nodePress দিয়ে ফর্ম প্রসেস করা

নোড (Node) থেকে ইমেইল পাঠাতে, আপনাকে প্রথমে nodemailer library এবং body-parser library ইনস্টল করতে হবে নিচের কমান্ড লাইন দিয়ে:

তারপর নতুন লাইব্রেরিগুলো লোড করুন এবং মেলার অবজেক্ট কনফিগার করুন। nodePress.js ফাইলের টপে, লাস্ট লাইব্রেরি লোড হওয়ার পর, এই লাইনগুলো যোগ করুন:

এটি নোডমেলার লাইব্রেরি লোড করবে এবং ইমেইল পাঠানোর জন্য রিযusable কম্পোনেন্ট সেট আপ করবে। আপনাকে <your email name> আপনার ইমেইল ঠিকানার নাম দিয়ে রিপ্লেস করতে হবে (অর্থাৎ @ চিহ্নের আগের অংশ), <your email domain> আপনার ইমেইল ঠিকানার ডোমেইন (সাধারণ জিমেইলের জন্য gmail.com অথবা আপনার নিজের ডোমেইন নাম যদি জিমেইল সেট আপ থাকে), এবং <your password> আপনার ইমেইল একাউন্টের পাসওয়ার্ড দিয়ে।

nodePress ভেরিয়েবল ইনিশিয়ালাইজ হওয়ার লাইনের পর এই কোডটি যোগ করুন:

এখন, লাস্ট nodePress.get() ফাংশন কলের পর এই কোডটি যোগ করুন:

এটি /api/message ঠিকানার হ্যান্ডলার। এই ফাংশন ফর্ম থেকে পাঠানো ইনফরমেশন নেয়, প্রপার ইমেইল মেসেজ তৈরি করে, এবং <your email address> এ দেওয়া ইমেইল ঠিকানাতে পাঠায়। ইমেইল পাঠানোর পর, এটি ইউজাকে /messagesent পেজে পাঠায় দেয়। বডি পার্সার মিডলওয়্যার URL প্যারামিটারগুলো request.body ভেরিয়েবলে সেভ করে রাখে এবং প্রপারলি স্যানিটাইজ করে।

এই কোডটি টু-ফ্যাক্টর অথেন্টিকেশন ছাড়া জিমেইল সেটআপের জন্য কাজ করে। আপনার টু-ফ্যাক্টর অথেন্টিকেশন থাকলে, আপনি Nodemailer ডকুমেন্টেশন রেফার করে সেট আপ করতে পারেন।

rubyPress দিয়ে ফর্ম প্রসেস করা

রুবিতে ইমেইল পাঠাতে, আপনাকে ruby-gmail লাইব্রেরি ইনস্টল করতে হবে নিচের কমান্ড লাইন দিয়ে:

আপনার রুবি সেটআপের উপর নির্ভর করে, আপনাকে কমান্ডের সামনে sudo ব্যবহার করতে হতে পারে। এখন লাইব্রেরি লোড করার জন্য, rubyPress.rb ফাইলের টপে এই লাইনটি যোগ করুন:

সকল get ডেফিনিশনের পর নিচের লাইনগুলো যোগ করুন:

এই যোগফলে, আপনার rubyPress সার্ভার ইমেইল ফর্ম প্রসেস করতে পারবে। একবার <your email address> আপনার ইমেইল ঠিকানায় এবং <your password> আপনার ইমেইল সার্ভারের পাসওয়ার্ডে বদলালে, স্ক্রিপ্টটি সম্পূর্ণ।

phpPress দিয়ে ফর্ম প্রসেস করা

শেষ সার্ভার হলো phpPress সার্ভার। সার্ভারে ইমেইল ক্যাপেবিলিটি যোগ করার জন্য, আমি phpmailer library ইনস্টল করব। এটি PHP-তে ইমেইলের জন্য সবচেয়ে বেশি ব্যবহৃত লাইব্রেরি। লাইব্রেরি ইনস্টল করতে, phpPress ডিরেক্টরিতে এই কমান্ড-লাইন কমান্ডগুলো চালান:

দুর্ভাগ্যবশত, কম্পোজার আপডেট LightnCandy লাইব্রেরি আপডেট করবে। এটা ভালো কারণ এটা অনেক ফাস্ট এবং ব্যবহার করা সহজ। কিন্তু এটি সার্ভার কোড ভাঙে দেয়। index.php ফাইলে, ProcessPage() ফাংশনটি খুঁজে বের করুন এবং নিচের কোড দিয়ে রিপ্লেস করুন:

পুরনো কোডের সাথে তুলনা করলে, আপনার আর টেম্পোরারি ফাইল দরকার নেই। সেটি সকল মেমরিতে হয় এবং তাই অনেক ফাস্ট। এখন, index.php ফাইলের টপে, জেড (Jade) লাইব্রেরির পর এই কোডটি যোগ করুন:

এটি phpmailer লাইব্রেরি লোড করে। এখন, লাস্ট $app->get() ফাংশনের পর এই কোডটি যোগ করুন:

এটি /api/message পাথের জন্য একটি পোস্ট রিকোয়েস্ট হ্যান্ডলার। এটি ব্রাউজার থেকে পাঠানো ফর্ম ডেটা রিট্রিভ করে, সেটি দিয়ে একটি ইমেইল তৈরি করে, এবং ইমেইল পাঠায়। PHP আটোমেটিক্যালি যেকোনো URL প্যারামিটার গ্লোবাল অ্যারে $_POST-এ রাখে।

আপনাকে <your email address>, <your password>, এবং <your name> আপনার ইমেইলের উপযুক্ত মান দিয়ে রিপ্লেস করতে হবে। আপনি যদি জিমেইল SMTP সার্ভার ছাড়া অন্য কিছু ব্যবহার করেন, তবে $mail->Host ঠিকানাও পরিবর্তন করতে হবে।

উপসংহার

আমি আপনাকে দেখিয়েছি কিভাবে সহজে একটি প্রেসসিএমএস (pressCMS) সাইটে ইমেইল ফর্ম যোগ করা যায়। এই টিউটোরিয়ালের ডাউনলোডে এই সব সার্ভার তাদের মডিফিকেশনসহ আছে। আপনি টাইপ না করে ডাউনলোড করলেই চলে। আমি কিছুটা এরর হ্যান্ডলিং করেছি। বাকিটা আপনার এক্সারসাইজ হিসেবে রেখেছি।

এখানে আমি যা পদ্ধতি শিখিয়েছি সেটি হলো URL-এ ডেটা রাখে ফর্ম ডেটা পোস্ট করা। আজকাল অনেক সাইট REST API ব্যবহার করে যেখানে ডেটা JSON স্ট্রিং হিসেবে বডিতে থাকে অ্যাকশন পারফর্ম করার জন্য। এই রুটিনগুলো সহজেই সেই মেথডলজিতে আডপ্ট করা যায়, কিন্তু সেটি আপনার এক্সারসাইজ (অথবা ভবিষ্যতের একটি টিউটোরিয়াল)। এখন যেহেতু আপনি এই পদ্ধতিতে জানেন, আপনার সাইটে নিজের ফর্ম যোগ করুন। এই টাইপের কাস্টমাইজেশন খুব মজাদার। একমাত্র সীমা আপনার কল্পনাশক্তি।

  1. RuboCop দিয়ে রুবি কোড কোয়ালিটি উন্নত: লিন্টিং ও অটো-ফরম্যাটিং

  2. ব্রাউজার আচরণ নিয়ন্ত্রণ: event.preventDefault() এবং event.stopPropagation() মাস্টার করুন

  3. Next.js-এ SendGrid API ব্যবহার করে কন্ট্যাক্ট ফর্ম তৈরি করুন: ধাপে ধাপে গাইড

  4. অ্যাপলের 'সাইন ইন উইথ অ্যাপল' ব্যাখ্যা: কীভাবে এটি কাজ করে, ব্যবহারের টিপস এবং নিরাপত্তার সুবিধা