1. Home
  2. FastApi
  3. Basic Fundamental
  4. Day 5 : Authentication lo...
  5. Email Sent

Email Sent

চমৎকার — এখন আমি এটাকে সম্পূর্ণ ব্লগ পোস্ট ফরম্যাটে, সুন্দর হেডিং, ব্যাখ্যা ও কোডসহ সাজিয়ে দিচ্ছি।


📧 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 কীভাবে পাবেন?

  1. যান: https://myaccount.google.com/
  2. Security → App passwords
  3. App হিসেবে “Mail” এবং device হিসেবে “Other (Custom)” সিলেক্ট করুন
  4. 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 পাঠানো

বল — পরের পোস্টে কোনটা চাই?

How can we help?