চমৎকার — এখন আমি এটাকে সম্পূর্ণ ব্লগ পোস্ট ফরম্যাটে, সুন্দর হেডিং, ব্যাখ্যা ও কোডসহ সাজিয়ে দিচ্ছি।
📧 Registration এর পর Email পাঠানো — FastAPI Simple Email Setup
আজকের এই পোস্টে আমরা শিখবো কীভাবে FastAPI প্রজেক্টে User Registration এর পর স্বয়ংক্রিয়ভাবে Email পাঠানো যায় — খুব সহজ ও প্রফেশনালভাবে।
এই গাইডটি এমনভাবে লেখা যে নতুন ডেভেলপারও সহজে বুঝতে পারে।
🔹 কেন Registration এর পর Email পাঠানো দরকার?
User যখন নতুন account তৈরি করে, তখন একটি confirmation বা welcome email পাঠানো হলে:
- User এর বিশ্বাস বাড়ে
- অ্যাকাউন্ট তৈরি সফল হয়েছে সেটা নিশ্চিত হয়
- প্রফেশনাল ফিল পাওয়া যায়
🛠️ ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইনস্টল করুন
প্রথমে নিচের লাইব্রেরিগুলো ইনস্টল করুন:
pip install aiosmtplib email-validator python-dotenv
🔍 কেন দরকার?
aiosmtplib→ Async email পাঠানোর জন্যemail-validator→ Email যাচাই করার জন্যpython-dotenv→.envফাইল থেকে environment variable লোড করার জন্য
🔐 ধাপ ২: Environment Variables সেট করুন
প্রজেক্ট root এ একটি .env ফাইল তৈরি করুন:
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_EMAIL=your-email@gmail.com
SMTP_PASSWORD=your-app-password
📌 Gmail App Password কীভাবে পাবেন?
- যান: https://myaccount.google.com/
- Security → App passwords
- App হিসেবে “Mail” এবং device হিসেবে “Other (Custom)” সিলেক্ট করুন
- Generate করে password কপি করুন
👉 এই password আপনার Gmail login password না — এটি আলাদা ও নিরাপদ।
✉️ ধাপ ৩: Email Service তৈরি করুন
📁 ফাইল তৈরি করুন:app/apps/auth/email_service.py
import aiosmtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
from dotenv import load_dotenv
load_dotenv()
SMTP_SERVER = os.getenv("SMTP_SERVER", "smtp.gmail.com")
SMTP_PORT = int(os.getenv("SMTP_PORT", 587))
SMTP_EMAIL = os.getenv("SMTP_EMAIL")
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD")
async def send_welcome_email(user_email: str, username: str):
"""Registration এর পর স্বাগত ইমেইল পাঠান"""
subject = "স্বাগতম আমাদের প্ল্যাটফর্মে!"
body = f"""
<html>
<body style="font-family: Arial, sans-serif;">
<h2>নমস্কার {username}!</h2>
<p>আপনার অ্যাকাউন্ট সফলভাবে তৈরি হয়েছে।</p>
<p>আপনি এখন লগইন করতে পারেন এবং আমাদের সেবা ব্যবহার করতে পারেন।</p>
<br>
<p>ধন্যবাদ!</p>
</body>
</html>
"""
try:
msg = MIMEMultipart("alternative")
msg["Subject"] = subject
msg["From"] = SMTP_EMAIL
msg["To"] = user_email
msg.attach(MIMEText(body, "html"))
async with aiosmtplib.SMTP(hostname=SMTP_SERVER, port=SMTP_PORT) as smtp:
await smtp.login(SMTP_EMAIL, SMTP_PASSWORD)
await smtp.send_message(msg)
print(f"✅ Email পাঠানো হয়েছে: {user_email}")
return True
except Exception as e:
print(f"❌ Email পাঠাতে ব্যর্থ: {str(e)}")
return False
🔍 এখানে কী হচ্ছে?
- Gmail SMTP ব্যবহার করে email পাঠানো হচ্ছে
- Email HTML format এ পাঠানো হচ্ছে
- সব কাজ async ভাবে হচ্ছে — যাতে server slow না হয়
🔁 ধাপ ৪: Registration Route এ Email যুক্ত করুন
📁 ফাইল:app/apps/auth/routes.py
প্রথমে import যোগ করুন:
from .email_service import send_welcome_email
import asyncio
এখন register function এ db.commit() এর পর email পাঠানোর কোড যুক্ত করুন:
@router.post("/register", response_model=schemas.UserResponse, status_code=status.HTTP_201_CREATED)
def register(user_data: schemas.UserRegister, db: Session = Depends(get_db)):
# ... আপনার আগের validation এবং user create logic ...
db.add(db_user)
db.commit()
db.refresh(db_user)
# Email পাঠান (background এ)
try:
asyncio.run(send_welcome_email(db_user.email, db_user.username))
except Exception as e:
print(f"Email পাঠাতে ব্যর্থ: {e}")
return db_user
🔍 ব্যাখ্যা:
- User database এ save হওয়ার পরই email পাঠানো হচ্ছে
- যদি email পাঠাতে সমস্যা হয়, registration fail হবে না — শুধু log হবে
🧪 ধাপ ৫: Testing করুন
✅ Step 1: Server চালু করুন
python -m uvicorn app.main:app --reload
✅ Step 2: Register করুন
curl -X POST "http://localhost:8000/auth/register" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "your-email@gmail.com",
"password": "password123",
"full_name": "Test User"
}'
📬 Step 3: Email চেক করুন
আপনার inbox এ একটি Welcome Email চলে আসবে! 🎉
📝 সারসংক্ষেপ
এই গাইডে আমরা শিখলাম:
✅ Registration এর পর স্বয়ংক্রিয়ভাবে email পাঠানো
✅ Gmail SMTP ব্যবহার করা
✅ Async email service তৈরি করা
✅ FastAPI route এর সাথে email যুক্ত করা
যদি চাও, আমি পরের পোস্টে এগুলো দেখাতে পারি:
- 🔐 Email verification system
- 🔄 Password reset via email
- 📧 HTML template দিয়ে সুন্দর email design
- ⚙️ BackgroundTasks ব্যবহার করে email পাঠানো
বল — পরের পোস্টে কোনটা চাই?