নোডমেইলার (Nodemailer) একটি Node.js মডিউল যা আপনার সার্ভার থেকে সহজে ইমেল পাঠাতে দেয়। ব্যবহারকারীদের সাথে যোগাযোগ করতে চান বা কিছু ভুল হলে নিজেকে নোটিফাই করতে চান — তার জন্য ইমেল একটি বিকল্প।
নোডমেইলার ব্যবহার করার 위에 অনেক আর্টিকেল আছে, কিন্তু এই আর্টিকেলটি সেগুলোর जैसा নয়। এখানে আমি নোডমেইলার এবং জিমেইল ব্যবহার করে Node.js ব্যাকএন্ড থেকে ইমেল পাঠানোর সবচেয়ে সাধারণ পদ্ধতি দেখাব।
নোডমেইলার দিয়ে শুরু করার পদ্ধতি
প্রথমে Express ব্যবহার করে আমাদের Node.js বয়লারপ্লেট সেট আপ করতে হবে। Node এবং npm ইনস্টল আছে কিনা চেক করতে নিচের কমান্ডগুলো চালান:
node -v npm -vযদি উভয় কমান্ড ভার্সন দেখায়, তাহলে আপনি প্রস্তুত। অন্যথায় যা অনুপস্থিত সেটি ইনস্টল করুন।
প্রজেক্টের জন্য একটি ডিরেক্টরি তৈরি করুন। আমরা nodemailerProject ব্যবহার করব।
mkdir nodemailerProjectনতুন তৈরি ডিরেক্টরির ভিতর যান এবং চালান:
npm initএটি package.json ফাইলসহ প্রজেক্টটি ইনিশিয়ালাইজ করবে।
এরপর Express ইনস্টল করুন:
npm install expressআপনি যেটি এন্ট্রি পয়েন্ট হিসেবে নির্দেশ করেছেন (ডিফল্ট হলো index.js), সেটি খুলে নিচের কোডটি পেস্ট করুন:
const express = require('express')
const app = express()
const port = 3000
app.listen(port, () => {
console.log(`nodemailerProject is listening at https://localhost:${port}`)
})এখানে Express ব্যবহার করে একটি সিম্পল সার্ভার শুরু করার যা দরকার সেটি আছে। নিচের কমান্ড চালিয়ে দেখতে পারেন এটি সঠিকভাবে কাজ করছে কিনা:
node index.jsনোডমেইলার ইনস্টল করার পদ্ধতি
নিচের কমান্ড দিয়ে নোডমেইলার ইনস্টল করুন:
npm install nodemailerনোডমেইলারের API বেশ সিম্পল এবং আমাদের নিচের কাজগুলো করতে হয়:
- একটি Transporter অবজেক্ট তৈরি করুন
- একটি MailOptions অবজেক্ট তৈরি করুন
- Transporter.sendMail মেথডটি ব্যবহার করুন
ট্রান্সপোর্টার অবজেক্ট তৈরি করতে:
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD,
clientId: process.env.OAUTH_CLIENTID,
clientSecret: process.env.OAUTH_CLIENT_SECRET,
refreshToken: process.env.OAUTH_REFRESH_TOKEN
}
});✋ দ্রুত করুন, user এবং pass কীসহ আপনার জিমেইল অ্যাকাউন্টের কردেনশিয়াল ছাড়া অন্য তিনটি কী OAuth সেট আপ করার পর পাওয়া যায়।
আমরা শুরুতেই বলেছিলাম, আমরা জিমেইল ব্যবহার করব। আপনি অনুমান করেছেন হবে, জিমেইলের সিকিউরিটি লেভেল ব্যবহারকারীর অ্যাকাউন্ট থেকে পাঠানো/প্রাপ্য মেইল নিয়ে খুব υψηল।
এই বাধা দূর করার кіль 방식 আছে (কিছু অন्यों চেয়ে ভালো), এবং আমরা সেটি বেছে নেব যা Google Cloud Platform-এ একটি প্রজেক্ট সেট আপ করতে হয়। জিমেইল দ্বারা সক্ষম OAuth সিকিউরিটির জন্য ক্রেডেনশিয়াল পাওয়ার এটিই একমাত্র পথ।
নোডমেইলারের সাথে জিমেইল ব্যবহারের জটিলতাগুলো পড়তে চাইলে এখানে যান।
পরবর্তী ধাপগুলো কোডিং নয়, কনফিগারেশন। তাই প্রস্তুত থাকুন।
Google Cloud Platform কনফিগারেশন
যদি আপনার Google Cloud Platform অ্যাকাউন্ট না থাকে, অবশ্যই একটা বানান। একবার সেট আপ হলে, উপরের বাম কোণে ড্রপডাউন মেনুতে ক্লিক করে নতুন প্রজেক্ট তৈরি করুন।
New Project অপশনটি সিলেক্ট করুন।
পরবর্তী উইন্ডোতে প্রজেক্টের নাম দিন। আপনার পছন্দমতো নাম দিন, আমরা NodemailerProject নাম দিচ্ছি। Location প্রপার্টি No organization রেখে দিন।
প্রজেক্ট সেট আপ হওয়ায় কয়েক সেকেন্ড লাগতে পারে, তারপর নিচের স্ক্রিনটি দেখবেন:
উপরের বাম কোণে তিনটি ড্যাশের লাইনে ক্লিক করে নেভিগেশন মেনু খুলুন এবং APIs and Services সিলেক্ট করুন।
নোডমেইলার এবং জিমেইল ব্যবহার করতে OAuth2 ব্যবহার করতে হবে। OAuth সম্পর্কে বিস্তারিত জানতে চাইলে এখানে যান।
প্রথমে OAuth Consent Screen কনফিগার করতে হবে।
আপনি যদি G-Suite মেম্বার না হন, তবে User Type-এ শুধু External অপশনই থাকবে।
Create-এ ক্লিক করার পর পরের স্ক্রিনে অ্যাপ্লিকেশনের তথ্য (আমাদের সার্ভার) দিতে হবে।
User support email ফিল্ডে এবং Developer contact information ফিল্ডে আপনার ইমেল দিন। Save and Continue ক্লিক করলে Scopes ফেজে যাবে। এই ফেজটি এড়িয়ে যান, কারণ এটি আমাদের জন্য প্রাসঙ্গিক নয়, এবং Test Users ফেজে যান।
এখানে নিজেকে ইউজার হিসেবে অ্যাড করুন এবং Save and continue ক্লিক করুন।
OAuth সেটিংস কনফিগার করার পদ্ধতি
এই ফেজে নোডমেইলারের সাথে ব্যবহার করার জন্য OAuth ক্রেডেনশিয়াল তৈরি করব। OAuth Consent Screen-এর উপরে Credentials ট্যাবে যান। প্লাস (➕) সাইন যেটির টেক্সট Create Credentials, সেটিতে ক্লিক করুন এবং OAuth Client ID বেছে নিন।
Application type ড্রপডাউন থেকে Web Application বেছে নিন।
Authorized Redirect URIs সেকশনে OAuth2 Playground (https://developers.google.com/oauthplayground) অ্যাড করুন, কারণ পরবর্তী ধাপে এখান থেকে একটি কী পেতে হবে।
Create-এ ক্লিক করলে আপনার Client ID এবং Client Secret দেখাবে। এগুলো কখনো কারো সাথে শেয়ার করবেন না, কোনো রকম এক্সপোজ করবেন না।
OAuth Refresh Token পান
Refresh token পেতে — যা নোডমেইলারের ট্রান্সপোর্টার অবজেক্টে ব্যবহার হবে — OAuth2 Playground-এ যান। আমরা এটি আগের ধাপে এই উদ্দেশ্যে অনুমোদন করেছিলাম।
- ডান পাশের গিয়ার আইকনে (OAuth2 Configuration) ক্লিক করুন এবং "Use your own OAuth2 credentials" চেকবক্সটি চেক করুন।
- বাম পাশের সার্ভিসের তালিকা থেকে নিচে স্ক্রোল করে Gmail API v1 খুঁজুন।
- Authorize APIs-এ ক্লিক করুন।
- আপনার যেকোনো জিমেইল অ্যাকাউন্টে লগইন করার স্ক্রিন আসবে। Test user হিসেবে যেটি লিস্ট করেছিলেন সেটি বেছে নিন।
- পরবর্তী স্ক্রিনে বলবে Google এখনও এই অ্যাপ্লিকেশন ভেরিফাই করেনি, কিন্তু চিন্তার ক কিছু নেই কারণ আমরা ভেরিফিকেশনের জন্য জমা দিনি। Continue ক্লিক করুন।
- পরবর্তী স্ক্রিনে আপনার প্রজেক্টকে জিমেইল অ্যাকাউন্টের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দিতে বলবে। অনুমতি দিন।
- এবার আপনি আবার OAuth Playground-এ রিডাইরেক্ট হবেন এবং বাম পাশের মেনুতে একটি অথরাইজেশন কোড দেখবেন। নীল বাটন Exchange authorization code for tokens-এ ক্লিক করুন।
এখন Refresh token এবং Access token ফিল্ডগুলো ভরলে যাবে।
সার্ভারে ফিরে যান
সব কনফিগারেশন করার পর আমাদের অ্যাপ্লিকেশনে ফিরে সব ডেটা ট্রান্সপোর্টার তৈরি করতে ব্যবহার করুন। কردেনশিয়ালগুলো প্রাইভেট রাখতে dotenv প্যাকেজ ব্যবহার করুন। এবং .env ফাইলটি .gitignore-এ যোগ করা ভুলবেন না।
এখন আমাদের কোডটি হবে:
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD,
clientId: process.env.OAUTH_CLIENTID,
clientSecret: process.env.OAUTH_CLIENT_SECRET,
refreshToken: process.env.OAUTH_REFRESH_TOKEN
}
});এরপর mailOptions অবজেক্ট তৈরি করুন যেটিতে ইমেল কোথায় পাঠাতে হবে এবং কী ডেটা সহ পাঠাতে হবে সেটি থাকবে।
let mailOptions = {
from: 'tomerpacific@gmail.com',
to: 'tomerpacific@gmail.com',
subject: 'Nodemailer Project',
text: 'Hi from your nodemailer project'
};এই অবজেক্টে আরও অনেক ফিল্ড এবং একাধিক রিসিপিয়েন্ট থাকতে পারে, কিন্তু এখানে সেগুলো আলোচনা করব না।
শেষে sendMail মেথড ব্যবহার করুন:
transporter.sendMail(mailOptions, function(err, data) {
if (err) {
console.log("Error " + err);
} else {
console.log("Email sent successfully");
}
});অ্যাপ্লিকেশন চালান এবং আপনার ইনবক্সে একটি নতুন ইমেল দেখতে পাবেন।
এই আর্টিকেলটি আমার একটি প্রজেক্ট থেকে প্রেরণা নিয়ে লেখা হয়েছে যা নোডমেইলার ব্যবহার করে। সেটি দেখতে চাইলে এখানে যান।