আজকের ডিজিটাল বিশ্বে, অনলাইন সিকিউরিটি খুব গুরুত্বপূর্ণ, এবং ইউজার অথেন্টিকেশন তার একটি клюচ দিক।
ইমেইল-ভিত্তিক অথেন্টিকেশন ইউজার রেজিস্ট্রেশন এবং লগইনের জন্য সবচেয়ে জনপ্রিয় এবং ব্যাপকভাবে ব্যবহৃত পদ্ধতির একটি। কিন্তু এটি সবসময় নির্ভরযোগ্য নয়, কারণ ব্যবহারকারীরা রেজিস্ট্রেশনের সময় নকল বা অবৈধ ইমেইল ঠিকানা দিতে পারে। এটি সিকিউরিটি রিস্ক এবং ফরেডের দিকে নিয়ে যেতে পারে। ইহা থেকে Email Validation Services কাজে আসে।
এই টিউটোরিয়ালে, আপনি Email Validation Service ব্যবহার করে ইউজার রেজিস্ট্রেশনের সময় ইমেইল ভ্যালিডেশন প্রক্রিয়া অটোমেট করবেন কন্টাক্ট ইনফরমেশন ভ্যালিডেট করে।
API ইমেইল ঠিকানার সিনট্যাক্স, ডোমেইন, এবং মেইলবক্স চেক করে, এবং ডিসপোজেবল এবং রিস্কি ইমেইলও ডিটেক্ট করতে পারে।
এই API আপনার অ্যাপ্লিকেশনের সাথে ইন্টিগ্রেট করে, আপনি নিশ্চিত করতে পারেন যে শুধু বৈধ এবং আসল ইমেইল ঠিকানা ইউজার রেজিস্ট্রেশনের জন্য ব্যবহৃত হচ্ছে, যা আপনার অ্যাপ্লিকেশনের সিকিউরিটি বাড়াবে।
পূর্বাপেক্ষা
টিউটোরিয়াল শুরু করার আগে, নিশ্চিত করুন যে আপনি নিচের প্রয়োজনীয়তাগুলো পূরণ করেছেন:
- পাইথনের Arbeits knowledge
- সিস্টেমে Python 3.8+ ইনস্টল করা
- Flask, Flask Blueprints এবং Requests-এর বেসিক জ্ঞান।
ভার্চুয়াল এনভায়রনমেন্ট সেট আপ করার পদ্ধতি
কোডিং শুরু করার আগে, আপনাকে নিশ্চিত করতে হবে যে আপনার সমস্ত প্রয়োজনীয় টুল এবং লাইব্রেরি ইনস্টল করা আছে। একটি ক্লিন এবং আইসোলেটেড এনভায়রনমেন্ট নিশ্চিত করতে, আপনি venv ব্যবহার করে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করবেন।
একটি প্রজেক্ট ডিরেক্টরি তৈরি করুন এবং টার্মিনালে সেখানে নেভিগেট করুন:
mkdir email-validation
cd email-validation
নিচের কমান্ড ব্যবহার করে env নামে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:
python -m venv env
Python এখন প্রি-ইনস্টলড venv লাইব্রেরি দিয়ে ভার্চুয়াল এনভায়রনমেন্ট তৈরি করার সুবিধা দেয়।
ভার্চুয়াল এনভায়রনমেন্ট এক্টিভেট করুন এইভাবে:
source env/bin/activate
নোট: আপনি যদি Windows-এ হন, তবে source env/Scripts/activate ব্যবহার করুন এনভায়রনমেন্ট এক্টিভেট করতে।
আপনার টার্মিনাল প্রম্পটে (env) দেখতে পাবেন, যা ইঙ্গিত দেয় যে ভার্চুয়াল এনভায়রনমেন্ট এক্টিভেটেড।
ইমেইল ভ্যালিডেশন যেকোনো ওয়েব অ্যাপ্লিকেশনের জন্য অতिआবশ্যক যেটি ইউজার অথেন্টিকেশন বাধ্য করে, এবং এটি করার বিভিন্ন উপায় রয়েছে।
একটি উপায় হল emailvalidation.io-এর মতো একটি ইমেইল ভ্যালিডেশন সার্ভিস ব্যবহার করা। এই API ডেভেলপারদের ইমেইল ঠিকানা ভ্যালিডেট করতে দেয় সিনট্যাক্টিক্যালি সঠিক কিনা, ডোমেইনটি এক্সিস্ট করে কিনা, এবং মেইলবক্সটি মেসেজ রিসিভ করতে পারে কিনা চেক করে।
API বিভিন্ন প্রাইসিং প্লান অফার করে বিভিন্ন প্রয়োজনের জন্য। ফ্রি প্ল্যান ডেভেলপারদের ১০০টি ইমেইল পর্যন্ত ভ্যালিডেট করতে দেয়, যা আমাদের টেস্টিং উদ্দেশ্যে পর্যাপ্ত হবে। পেইড প্ল্যানগুলো $9.99 প্রতি মাস থেকে শুরু হয় এবং বেশি রিকোয়েস্ট, বেশি ফিচার, এবং দ্রুত রেসপন্স টাইম অফার করে।
এই সেকশনে, আপনি একটি পাইথন ফাংশন লিখবেন যা API-এর এন্ডপয়েন্টে একটি GET রিকোয়েস্ট পাঠাবে এবং ভ্যালিডেট করার জন্য ইমেইল ঠিকানাটি প্যারামিটার হিসেবে পাস করবে।
API রিকোয়েস্ট অথেন্টিকেট করতে, আপনাকে রিকোয়েস্টের সাথে API key পাস করতে হবে। আগে যাওয়ার আগে, আপনাকে emailvalidation.io-তে একটি অ্যাকাউন্ট তৈরি করতে হবে API key পাওয়ার জন্য। একবার আপনি আপনার অ্যাকাউন্ট তৈরি করলে, আপনাকে একটি ড্যাশবোর্ডে রিডাইরেক্ট করা হবে, নিচের ছবির মতো। API key কালো হাইলাইটেড এলাকায় অবস্থিত।
GET রিকোয়েস্ট করতে, আপনাকে আপনার ভার্চুয়াল এনভায়রনমেন্টে requests লাইব্রেরি ইনস্টল করতে হবে:
pip install requests
পরবর্তী, একটি test.py ফাইল তৈরি করুন এবং নিচের কোডটি সেখানে যোগ করুন:
import requests
from requests.structures import CaseInsensitiveDict
def is_valid(email: str):
url = f"https://api.emailvalidation.io/v1/info?email={email}"
headers = CaseInsensitiveDict()
headers["apikey"] = "your-api-key-here"
response = requests.get(url, headers=headers)
return response.json()
print(is_valid("support@emailvalidation.io"))
print(is_valid("venip42579@jdsdhak.com"))
is_valid ফাংশনটি একটি ইমেইল ঠিকানা আর্গুমেন্ট হিসেবে নেয় এবং ইমেইল ঠিকানাটি সহ একটি URL কনস্ট্রাক্ট করে emailvalidation.io API কল করতে। requests.structures মডিউল থেকে CaseInsensitiveDict ক্লাসটি ব্যবহার করা হয়েছে রিকোয়েস্টের হেডারে API key সেট করার জন্য কেস-ইনসেনসিটিভ কী সহ একটি ডিকশনারি তৈরি করতে। আপনি তারপর ফাংশন থেকে JSON রেসপন্স রিটার্ন করেন।
অবশেষে, আপনি is_valid ফাংশনটি দুবার কল করেন ভিন্ন ইমেইল ঠিকানাদি দিয়ে দেখানোর জন্য কীভাবে ফাংশনটি একটি বৈধ ইমেইল ঠিকানা (support@emailvalidation.io) এবং একটি অবৈধ ইমেইল ঠিকানা (venip42579@jdsdhak.com) ভ্যালিডেট করতে পারে।
আউটপুট:
{
"email":"support@emailvalidation.io",
"user":"support",
"tag":"",
"domain":"emailvalidation.io",
"smtp_check":true,
"mx_found":true,
"did_you_mean":"",
"role":true,
"disposable":false,
"score":0.64,
"state":"deliverable",
"reason":"valid_mailbox",
"free":false,
"format_valid":true,
"catch_all":"None"
}
{
"email":"venip42579@jdsdhak.com",
"user":"venip42579",
"tag":"",
"domain":"jdsdhak.com",
"smtp_check":false,
"mx_found":false,
"did_you_mean":"",
"role":false,
"disposable":false,
"score":0.64,
"state":"undeliverable",
"reason":"invalid_mx",
"free":false,
"format_valid":true,
"catch_all":"None"
}
রেসপন্সের বিভিন্ন কী সম্পর্কে এখানে জানতে পারেন। emailvalidation.io-র JSON রেসপন্সের ভিত্তিতে একটি ইমেইল ঠিকানা বৈধ বা অবৈধ কিনা নির্ধারণ করতে, আপনাকে নিচের ফিল্ডগুলো চেক করতে হবে:
format_valid: যদিtrue, ইমেইল ঠিকানাটি সঠিকভাবে ফরম্যাটেড। যদিfalse, ইমেইল ঠিকানাটি বৈধ নয়।mx_found: যদিtrue, ডোমেইনের জন্য কমপক্ষে একটি MX রেকর্ড পাওয়া গেছে। যদিfalse, ডোমেইনটি বৈধ নয়।smtp_check: যদিtrue, ইমেইল ঠিকানাটির একটি বৈধ মেইলবক্স আছে। যদিfalse, মেইলবক্সটি বৈধ নয়।state: ইমেইল ঠিকানার বর্তমান অবস্থা। মানগুলো হতে পারে "deliverable" বা "undeliverable"।
সুতরাং, আপনি is_valid ফাংশনটি মডিফাই করতে পারেন একটি বুলিয়ান রেসপন্স রিটার্ন করার জন্য JSON অবজেক্টের বদলে নিচে দেখানো অনুযায়ী:
import requests
from requests.structures import CaseInsensitiveDict
def is_valid(email: str):
url = f"https://api.emailvalidation.io/v1/info?email={email}"
headers = CaseInsensitiveDict()
headers["apikey"] = "nUH1hmV24lEwX1TIXmsgRPRRZw0L0NuOeHrdMp78"
response = requests.get(url, headers=headers)
if response.status_code == 200:
json_resp = response.json()
format_valid = json_resp["format_valid"]
mx_found = json_resp["mx_found"]
smtp_check = json_resp["smtp_check"]
state = json_resp["state"]
return format_valid and mx_found and smtp_check and state == "deliverable"
return False
print(is_valid("support@emailvalidation.io"))
print(is_valid("venip42579@jdsdhak.com"))
আউটপুট:
True
False
আগামী সেকশনে, আপনি এই ফাংশনটি ইউজার রেজিস্ট্রেশনের সময় ইমেইল ভ্যালিডেট করতে ব্যবহার করবেন।
Flask-এ বেসিক ইউজার অথেন্টিকেশন সেট আপ করার পদ্ধতি
এই সেকশনে, আপনি Flask-এ বেসিক ইউজার অথেন্টিকেশন সেট আপ করার ধাপগুলো পাস করবেন। আপনি আমার একটি পূর্ববর্তী আর্টিকেলের কোড ব্যবহার করবেন যেখানে আমি বেসিক ইউজার অথেন্টিকেশন ইমপ্লিমেন্ট করার পদ্ধতি ব্যাখ্যা করেছিলাম।
আপনি email-validation ফোল্ডারে GitHub রিপোজিটরি থেকে কোড পুল করে শুরু করতে পারেন:
git init
git remote add origin https://github.com/ashutoshkrris/Flask-User-Authentication.git
git pull origin main
নোট: কমান্ড git clone [https://github.com/ashutoshkrris/Flask-User-Authentication.git](https://github.com/ashutoshkrris/Flask-User-Authentication.git) . এই কেসে রান হবে না কারণ আপনার ডিরেক্টরি খালি নেই।
পরবর্তী, আপনি একটি requirements.txt ফাইল দেখবেন যা আপনার সিস্টেমে অ্যাপ্লিকেশন চালানোর জন্য ডিপেন্ডেন্সিগুলো ধারণ করে। ডিপেন্ডেন্সিগুলো ইনস্টল করুন এই কমান্ড দিয়ে:
pip install -r requirements.txt
সব ডিপেন্ডেন্সি ইনস্টল হয়ে গেলে, আপনাকে প্রজেক্টের জন্য প্রয়োজনীয় এনভায়রনমেন্ট ভেরিয়েবল যোগ করতে হবে। প্রজেক্টে একটি .env ফাইল রয়েছে যেটিতে সকল এনভায়রনমেন্ট ভেরিয়েবল আছে। নিচের কমান্ড রান করে .env ফাইল থেকে সকল এনভায়রনমেন্ট ভেরিয়েবল এক্সপোর্ট করুন:
source .env
পরবর্তী, আপনাকে ডাটাবেস তৈরি করতে হবে। যেহেতু প্রজেক্ট Flask-Migrate ব্যবহার করে, ডাটাবেস তৈরি করা একটি সহজ কাজ নিচের কমান্ডগুলো দিয়ে:
python manage.py db init
python manage.py db migrate
python manage.py db upgrade
এখন, আপনি অ্যাপ্লিকেশনটি রান করতে পারেন এই কমান্ড দিয়ে:
python manage.py run
অ্যাপ্লিকেশন চলতে শুরু করবে এবং আপনি আপনার ওয়েব ব্রাউজারে https://localhost:5000/login-এ যেতে পারেন অ্যাপ্লিকেশন দেখতে।
এখানে একটি ডেমো ভিডিও রয়েছে যা অ্যাপ্লিকেশনটি দেখাচ্ছে:
আপনার প্রজেক্ট flask-validation-এর ভিতরে, আপনার একটি src ফোল্ডার থাকবে যেটি আপনার সোর্স কোড ধারণ করে এবং একটি tests ফোল্ডার যেটি ইউনিট টেস্ট ধারণ করে।
এদের পাশাপাশি, আপনার একটি config.py ফাইল থাকবে যেটিতে আপনার অ্যাপ্লিকেশনের কনফিগারেশন সেটিংস রয়েছে এবং একটি manage.py ফাইল যেটি Flask-CLI ব্যবহার করে আপনার অ্যাপ্লিকেশন রান এবং টেস্ট করার জন্য বিভিন্ন কমান্ড যোগ করে। আপনি অন্যান্য ফাইলগুলোর মতো .env এবং requirements.txtও পাবেন যা আপনি ইতিমধ্যে জানেন।
src ফোল্ডারে চারটি সাবফোল্ডার রয়েছে – accounts, core, templates, এবং static। templates এবং static ফোল্ডারগুলো HTML ফাইল এবং স্ট্যাটিক ফাইল যেমন CSS, ছবি, এবং জাভাস্ক্রিপ্ট ফাইল ধারণ করে। অন্যান্য দুটি ফোল্ডার, accounts এবং core, Flask Blueprints কনসেপ্ট ব্যবহার করে এবং অ্যাপ্লিকেশনের বিভিন্ন অংশের জন্য রেসপেক্টিভ কোড ধারণ করে।
আপনি যদি আপনার Flask অ্যাপ্লিকেশনের ইমপ্লিমেন্টেশন সম্পর্কে আরও জানতে চান, তবে এই টিউটোরিয়ালটি রেফার করতে পারেন।
আপনার Flask অ্যাপে ইমেইল ভ্যালিডেশন সার্ভিস ইন্টিগ্রেট করার পদ্ধতি
এই পয়েন্ট পর্যন্ত, অ্যাপ্লিকেশনে যেকোনো ইমেইল ঠিকানা ব্যবহার করে সফলভাবে রেজিস্ট্রেশন করা সম্ভব, সেটি বৈধ কিনা বা নয় তার প্রকাশে।
কিন্তু আপনার ডাটাবেসে র্যান্ডম বা ভুল ইমেইল ঠিকানা জমা হওয়া প্রত্যাশা নয়। তাই ইউজার রেজিস্টার করার আগে ইমেইল ঠিকানাটি ভ্যালিডেট করা একটি ভালো আইডিয়া। ইমেইল ঠিকানাটি বৈধ হলে, আপনি সফলভাবে ইউজার রেজিস্টার করতে পারেন।
আপনার Email Validation API Key .env ফাইলে যোগ করুন যাতে আপনি এটিকে পাবলিকলি এক্সপোজ ছাড়া পড়তে পারেন:
export SECRET_KEY=fdkjshfhjsdfdskfdsfdcbsjdkfdsdf
export DEBUG=True
export APP_SETTINGS=config.DevelopmentConfig
export DATABASE_URL=sqlite:///db.sqlite
export FLASK_APP=src
export FLASK_DEBUG=1
export API_KEY=your-api-key-here
your-api-key-here-কে আপনার সঠিক API key দিয়ে রিপ্লেস করুন। পরérée, আপনাকে আবার নিচের কমান্ড রান করতে হবে এনভায়রনমেন্ট ভেরিয়েবল এক্সপোর্ট করার জন্য:
source .env
এখন, src ফোল্ডারের ভিতরে accounts সাবফোল্ডারে একটি utils.py ফাইল তৈরি করুন। ফাইলটি ইমেইল ভ্যালিডেট করার ইউটিলিটি ফাংশন ধারণ করবে। ফাইলে নিচের কোড যোগ করুন:
import requests
from requests.structures import CaseInsensitiveDict
from decouple import config
def is_valid(email: str):
url = f"https://api.emailvalidation.io/v1/info?email={email}"
headers = CaseInsensitiveDict()
headers["apikey"] = config("API_KEY")
response = requests.get(url, headers=headers)
if response.status_code == 200:
json_resp = response.json()
format_valid = json_resp["format_valid"]
mx_found = json_resp["mx_found"]
smtp_check = json_resp["smtp_check"]
state = json_resp["state"]
return format_valid and mx_found and smtp_check and state == "deliverable"
return False
যেভাবে পূর্বে উল্লেখ করা হয়েছে, is_valid() ফাংশনটি একটি বুলিয়ান মান রিটার্ন করে ইঙ্গিত দেয় যে ইমেইল ঠিকানাটি বৈধ কিনা। মনে রাখা গুরুত্বপূর্ণ যে ফাংশনটি API key মান হার্ডকোড করে না, বরং এনভায়রনমেন্ট ভেরিয়েবল থেকে এটি রিট্রিভ করে।
পরবর্তী, forms.py ফাইলে RegisterForm ক্লাসে, আপনার একটি validate মেথড আছে। এই মেথডটি ইউজার রেজিস্ট্রেশনের সময় ব্যবহারকারীর সাবমিট করা ইনপুট ডেটা ভ্যালিডেট করার জন্য দায়িত্বপূর্ণ।
পূর্বে, এই মেথডটি শুধু চেক করতো ইমেইলটি ইতিমধ্যে রেজিস্টার্ড কিনা এবং পাসওয়ার্ডগুলো ম্যাচ করছে কিনা। কিন্তু এখন আপনি একটি অতিরিক্ত ভ্যালিডেশন যোগ করতে পারেন ইমেইলটি বৈধ কিনা চেক করার জন্য। সুতরাং মডিফাইড validate মেথডটি দেখতে এভাবে হবে:
...
from src.accounts.utils import is_valid
...
class RegisterForm(FlaskForm):
...
def validate(self):
initial_validation = super(RegisterForm, self).validate()
if not initial_validation:
return False
if not is_valid(self.email.data):
self.email.errors.append("Email is invalid")
return False
user = User.query.filter_by(email=self.email.data).first()
if user:
self.email.errors.append("Email already registered")
return False
if self.password.data != self.confirm.data:
self.password.errors.append("Passwords must match")
return False
return True
validate মেথডে, যদি self.email.data (অর্থাৎ ব্যবহারকারীর ইমেইল ঠিকানা) বৈধ না হয়, তবে আপনি self.email.errors লিস্টে একটি এরর মেসেজ অ্যাপেন্ড করুন এবং False রিটার্ন করুন যার মানে ইউজার ডেটা বৈধ নয়।
এখন, যখন আপনি অ্যাপ্লিকেশনটি রান করবেন এবং রেজিস্টার করার চেষ্টা করবেন, আপনি এটিকে লাইভ দেখতে পাবেন। এখানে বৈধ এবং অবৈধ উভয় কেসের একটি ডেমো।
ইমেইল ভ্যালিডেশন সার্ভিসের অন্যান্য ইউজ কেস
রেজিস্ট্রেশনের সময় ইউজারের ইমেইল ভ্যালিডেট করার পাশাপাশি, ইমেইল ভ্যালিডেশন সার্ভিসের অন্যান্য কিছু ইউজ কেস রয়েছে। 그중 কিছু হলো:
- ইমেইল লিস্ট পরিশোধন: আপনি ইমেইল ভ্যালিডেশন সার্ভিস ব্যবহার করে ইমেইল লিস্ট পরিশোধন করতে পারেন অবৈধ, অস্তিত্বহীন বা রিস্কি ইমেইল ঠিকানা রিমুভ করে। এটি ইমেইল ডেলিভারেবিলিটি উন্নত করতে সাহায্য করতে পারে এবং নিশ্চিত করতে পারে যে আপনার ইমেইলগুলো কাঙ্ক্ষিত প্রাপকদের কাছে পৌঁছাচ্ছে।
- ফরেডুলেন্ট অ্যাক্টিভিটি প্রতিরোধ: আপনি নকল অ্যাকাউন্ট তৈরি বা ফরেডুলেন্ট অর্ডার এর মতো ফরেডুলেন্ট অ্যাক্টিভিটি ডিটেক্ট করতে ইমেইল ভ্যালিডেশন সার্ভিস ব্যবহার করতে পারেন। এই অ্যাক্টিভিটিগুলোর সাথে জড়িত ইমেইল ঠিকানাগুলো ভ্যালিডেট করে, আপনি এই soort অ্যাক্টিভিটি হোনোর সম্ভাবনা রোধ করতে পারেন।
- মার্কেটিং ক্যাম্পেইন উন্নত করা: এই সার্ভিসগুলো ইমেইল মার্কেটিং ক্যাম্পেইন-এর নির্ভুলতা এবং কার্যকারিতা উন্নত করতে সাহায্য করতে পারে। ইমেইল ঠিকানাগুলো বৈধ এবং এক্টিভ আছে নিশ্চিত করে, ব্যবসা প্রতিষ্ঠানরা তাদের ইমেইল ডেলিভারেবিলিটি রেট বাড়াতে পারেন এবং তাদের সামগ্রিক ক্যাম্পেইন পারফরম্যান্স উন্নত করতে পারেন।
সামগ্রিকভাবে, ইমেইল ভ্যালিডেশন সার্ভিসগুলো ইউজার ডেটার নির্ভুলতা এবং বৈধতা নিশ্চিত করতে, ফরেড প্রতিরোধ করতে, এবং ইউজার এক্সপেরিয়েন্স উন্নত করতে একটি শক্তিশালি টুল হতে পারে।
উপসংহার
ইমেইল ভ্যালিডেশন সার্ভিসগুলো যেকোনো অ্যাপ্লিকেশনের জন্য একটি শক্তিশালি টুল যেটি ইউজার ইমেইল ঠিকানা ভেরিফাই করার প্রয়োজন। ইমেইল ঠিকানাগুলো বৈধ কিনা নিশ্চিত করা অতिआবশ্যক ত্রুটি প্রতিরোধ করতে এবং নিশ্চিত করতে যে ইউজার ইনপুট ডেটা সঠিক।
এই আর্টিকেলে, আপনি দেখেছেন কীভাবে emailvalidation.io API ব্যবহার করে পাইথনে একটি ইমেইল ঠিকানা ভ্যালিডেট করতে হয়। আপনি ইমেইল ভ্যালিডেশন সার্ভিসের অন্যান্য সম্ভাব্য ইউজ কেসও শিখেছেন, যেমন ফরেড ডিটেকশন এবং ইমেইল মার্কেটিং।
আপনার অ্যাপ্লিকেশনে ইমেইল ভ্যালিডেশন সার্ভিস ইমপ্লিমেন্ট করে, আপনি আপনার ইউজার এক্সপেরিয়েন্স উন্নত করতে পারেন এবং নিশ্চিত করতে পারেন যে আপনার ডেটা নির্ভুল এবং আপ-টু-ডেট।
অতিরিক্ত রিসোর্স
- Flask Apps অর্গানাইজ করার জন্য Blueprints কীভাবে ব্যবহার করবেন
- Flask App-এ ইমেইল ভেরিফিকেশন সেট আপ করার পদ্ধতি
- emailvalidation.io ডকুমেন্টেশন
নি:শুল্কে কোডিং শিখুন। freeCodeCamp-এর ওপেন সোর্স ক্যারিকুলাম ৪০,০০০-এর অধিক লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন।