FA-TOOLS — Header Component
کدهای آماده برای ارسال ایمیل با پایتون

کدهای آماده برای ارسال ایمیل با پایتون

رفیق برنامه‌نویس، بیا راستش رو بگیم؛ ارسال ایمیل یه جزء جدانشدنی از تقریباً هر پروژه‌ایه، از اطلاع‌رسانی به کاربرها گرفته تا ارسال گزارش‌های روزانه. اما کی حال وایسادن و از صفر نوشتن کدهاش رو داره؟ خبر خوب اینه که تو پایتون، با چند خط کد آماده و خوشگل، می‌تونی این کار رو به سادگی آب خوردن انجام بدی! هدف ما تو این مقاله اینه که همه چی رو از پایه تا پیشرفته، به زبون خودمونی و با کدهای آماده بهت یاد بدیم. پس کمربندهاتو سفت کن که بریم برای یه سفر هیجان‌انگیز تو دنیای ارسال ایمیل با پایتون. اگر دنبال ابزارهای خفن و اسنیپت‌های پایتونی برای پروژه‌های دیگه‌ت هستی، حتماً یه سر به کدهای آماده پایتون ما بزن. از دست نده!

نقشه راه سریع: ارسال ایمیل با پایتون در یک نگاه

کدهای آماده برای ارسال ایمیل با پایتون — تصویر 1

این اینفوگرافیک متنی، خلاصه‌ای از مراحلیه که برای ارسال ایمیل با پایتون باید طی کنی. یک میان‌بر برای رفقای عجول!

  • 📧 مرحله اول: آماده‌سازی ماژول‌ها
  • smtplib برای ارتباط با سرور ایمیل
  • email برای ساخت پیام (متن، HTML، پیوست)
  • ⚙️ مرحله دوم: پیکربندی SMTP
  • – آدرس سرور و پورت (مثلاً smtp.gmail.com:587)
  • – اطلاعات ورود (ایمیل و رمز عبور یا App Password)
  • ✍️ مرحله سوم: ساخت محتوای ایمیل
  • – تنظیم فرستنده، گیرنده، عنوان (Subject)
  • – اضافه کردن متن ساده، HTML یا پیوست
  • 🚀 مرحله چهارم: ارسال نهایی
  • – استفاده از server.starttls() برای امنیت
  • – ورود به سرور (server.login()) و ارسال (server.sendmail())
  • نکات طلایی: مدیریت خطا، امنیت، استفاده از رمز عبورهای برنامه (App Passwords).

💡 برای حل مشکلات احتمالی، بخش “عیب‌یابی سریع” رو از دست نده!

چرا باید از پایتون برای ارسال ایمیل استفاده کنیم؟ (مقدمه‌ای دوستانه)

کدهای آماده برای ارسال ایمیل با پایتون — تصویر 2

تصور کن یه عالمه ایمیل داری که باید به صورت خودکار برای کاربرهات بفرستی: ایمیل‌های خوش‌آمدگویی، فراموشی رمز عبور، نوتیفیکیشن‌های مختلف یا حتی گزارش‌های هفتگی عملکرط سیستم. نشستن و دستی فرستادن این ایمیل‌ها نه تنها غیرممکنه، بلکه زمان و انرژی زیادی هم ازت می‌گیره. اینجا پایتون میاد وسط و با قدرت و سادگی همیشگیش، کار رو برات در میاره. پایتون به خاطر کتابخانه‌های غنی و سینتکس خواناش، یکی از بهترین انتخاب‌ها برای اتوماسیون وظایف مختلف، از جمله ارسال ایمیله. قابلیط این زبان در اتصال به سرورهای SMTP و ساختاردهی پیام‌های پیچیده، اونو به یه ابزار فوق‌العاده برای هر برنامه‌نویسی تبدیل می‌کنه.

قطعات اصلی پازل: ماژول‌های پایتون برای ارسال ایمیل

کدهای آماده برای ارسال ایمیل با پایتون — تصویر 3

برای اینکه بتونیم با پایتون ایمیل بفرستیم، به دو تا ماژول اصلی نیاز داریم که خوشبختانه هردوشون جزو کتابخانه‌های استاندارد پایتون هستن و نیازی به نصب اضافیشون نیست:

`smtplib`: موتور قدرتمند ارسال ایمیل

این ماژول مسئول برقراری ارتباط با سرور SMTP (Simple Mail Transfer Protocol) ایمیله. در واقع، smtplib همون رابطی هست که پایتون از طریق اون با سرور ایمیل (مثلاً سرور Gmail یا Outlook) صحبت می‌کنه و دستورات ارسال ایمیل رو بهش میده. کارهایی مثل اتصال به سرور، ورود به حساب کاربری (لاگین) و در نهایت ارسال پیام اصلی، همگی توسط این ماژول انجام میشه.

`email`: ساختاردهی پیام‌های ایمیل (متن ساده، HTML، پیوست‌ها)

ماژول smtplib فقط مسئول ارسال “بایت” به سروره. اما خود ایمیل چطور باید ساخته بشه؟ عنوانش چی باشه؟ فرستنده و گیرنده کی باشن؟ متن ساده باشه یا HTML؟ پیوست داشته باشه یا نه؟ همه این جزئیات و ساختاردهی پیام ایمیل رو ماژول email بر عهده داره. این ماژول به ما کمک می‌کنه تا پیام‌های چندبخشی (مثل ایمیل‌های حاوی متن و HTML به صورت همزمان) و ایمیل‌های دارای پیوست رو به راحتی بسازیم.

گام به گام: ارسال یک ایمیل ساده با پایتون

خب رفیق، بریم سراغ بخش هیجان‌انگیز قضیه! اولین قدم برای ارسال ایمیل، یه پیام متنی سادست. قبلش لازمه یه سری اطلاعات رو آماده کنی:

پیش‌نیازها (تنظیمات SMTP سرور)

  • آدرس سرور SMTP: مثلاً برای Gmail این آدرس smtp.gmail.com هست. برای Outlook میشه smtp.office365.com و برای سایر سرویس‌ها هم باید چک کنی.
  • پورت SMTP: معمولاً پورت 587 برای اتصال امن (TLS) یا 465 برای اتصال SSL استفاده میشه. ما اینجا از 587 استفاده می‌کنیم.
  • نام کاربری و رمز عبور: همون ایمیل و رمز عبور اکانتت. توجه: برای Gmail باید از “App Password” (رمز عبور برنامه) استفاده کنی، نه رمز عبور اصلی اکانتت.

نکته مهم: هرگز اطلاعات حساس مثل رمز عبور رو مستقیماً تو کد ننویس! برای پروژه‌های واقعی از متغیرهای محیطی یا فایل‌های تنظیمات استفاده کن. این یک نمونه آموزشیه.

کد آماده برای ارسال ایمیل متنی ساده

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# --- تنظیمات ایمیل ---
sender_email = "ایمیل_فرستنده@example.com"  # ایمیل خودت
receiver_email = "ایمیل_گیرنده@example.com" # ایمیل گیرنده
password = "رمز_عبور_برنامه_یا_اصلی"  # رمز عبور App Password برای Gmail
subject = "سلام از پایتون! 🐍"
body = "این یک پیام تستی از اسکریپت پایتون منه."

# --- تنظیمات سرور SMTP ---
smtp_server = "smtp.gmail.com"  # یا smtp.office365.com یا سرور خودت
smtp_port = 587

# --- ساخت پیام ایمیل ---
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] .= receiver_email # غلط املایی اول: در اینجا باید '=' استفاده شود.
msg['Subject'] = subject

msg.attach(MIMEText(body, 'plain', 'utf-8'))

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # برای اتصال امن (TLS)
    server.login(sender_email, password)
    text = msg.as_string()
    server.sendmail(sender_email, receiver_email, text)
    server.quit()
    print("ایمیل با موفقیت ارسال شد!")
except Exception as e:
    print(f"خطا در ارسال ایمیل: {e}")

توضیحات کد بالا اینه که اول با `smtplib.SMTP` یه اتصال به سرور SMTP برقرار می‌کنیم. بعد با `server.starttls()` اتصال رو امن می‌کنیم و با `server.login()` وارد حساب کاربری میشیم. در نهایت، با استفاده از `server.sendmail()` و پیامی که با ماژول `email` ساختیم، پیام رو ارسال می‌کنیم. یادت نره که بعد از ارسال، با `server.quit()` اتصال رو قطع کنی. اینطوری منابع سرور هم بیهوده اشغال نمیشه.

برای مشاهده کدهای آماده و کاربردی پایتون بیشتر، حتماً به صفحه اسنیپت‌های پایتون ما سر بزن!

ارسال ایمیل با فرمت HTML: رنگ و بوی تازه به پیام‌ها

ایمیل‌های متنی ساده خوبن، اما اگه بخوای ایمیل‌های قشنگ‌تر و حرفه‌ای‌تری با عکس، لینک و استایل‌های خاص بفرستی، باید بری سراغ HTML. ماژول email اینجا هم به کمکت میاد و کار رو خیلی ساده می‌کنه.

کد آماده برای ارسال ایمیل HTML

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# --- تنظیمات ایمیل ---
sender_email = "ایمیل_فرستنده@example.com"
receiver_email = "ایمیل_گیرنده@example.com"
password = "رمز_عبور_برنامه_یا_اصلی"
subject = "ایمیل HTML زیبا از پایتون!"

html_body = """
<html>
  <head></head>
  <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
    <h1 style="color: #007bff;">سلام رفیق!</h1>
    <p>این یک ایمیل <strong>HTML</strong> زیباست که با <span style="color: #28a745;">پایتون</span> ارسال شده.</p>
    <p>میتونی <a href="https://fa-tools.ir" style="color: #007bff; text-decoration: none;">وبسایت ما</a> رو برای ابزارهای بیشتر ببینی.</p>
    <img src="https://via.placeholder.com/150/007bff/ffffff?text=Python" alt="Python Logo" style="max-width: 100%; height: auto; display: block; margin-top: 20px;">
    <p>با احترام،<br>
    تیم fa-tools.ir</p>
  </body>
</html>
"""

# --- تنظیمات سرور SMTP (مشابه قبل) ---
smtp_server = "smtp.gmail.com"
smtp_port = 587

# --- ساخت پیام ایمیل ---
msg = MIMEMultipart("alternative") # برای پشتیبانی از متن ساده و HTML
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject

# اضافه کردن ورژن متن ساده (به عنوان فال‌بک)
text_version = "این یک ایمیل HTML است. لطفاً کلاینت ایمیل خود را به روز کنید تا آن را به درستی نمایش دهد."
msg.attach(MIMEText(text_version, 'plain', 'utf-8'))

# اضافه کردن ورژن HTML
msg.attach(MIMEText(html_body, 'html', 'utf-8'))

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, msg.as_string())
    server.quit()
    print("ایمیل HTML با موفقیت ارسال شد!")
except Exception as e:
    print(f"خطا در ارسال ایمیل HTML: {e}")

تفاوت اصلی اینجا اینه که به جای `MIMEText(body, ‘plain’)`، ما از `MIMEMultipart(“alternative”)` استفاده می‌کنیم و دو بخش رو بهش اضافه می‌کنیم: یکی برای متن ساده (به عنوان فال‌بک برای کلاینت‌های قدیمی) و یکی برای متن HTML. به این شکل، ایمیل شما هم برای کسانی که از کلاینت‌های جدید استفاده می‌کنن زیبا و کامل نمایش داده میشه و هم کسانی که ممکنه کلاینت‌های قدیمی‌تر داشته باشن، حداقل متن ایمیل رو به صورت ساده می‌بینن. برای جزئیات بیشتر در مورد طراحی ایمیل‌های HTML، می‌تونی سری به اسنیپت‌های HTML ما بزنی.

اضافه کردن پیوست (Attachment): وقتی یک فایل هم باید همراه باشه!

گاهی اوقات لازمه کنار پیامتون یه فایل هم بفرستی. مثلاً یه گزارش PDF، یه عکس یا هر چیز دیگه‌ای. ماژول‌های email.mime.base و email.mime.application (برای فایل‌های اپلیکیشنی مثل PDF) و email.mime.image (برای عکس‌ها) اینجا به کمکت میان.

ارسال فایل‌های تکی

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders # برای انکد کردن پیوست
import os # برای کار با مسیر فایل‌ها

# --- تنظیمات ایمیل ---
sender_email = "ایمیل_فرستنده@example.com"
receiver_email = "ایمیل_گیرنده@example.com"
password = "رمز_عبور_برنامه_یا_اصلی"
subject = "ایمیل با پیوست از پایتون"
body = "سلام، این ایمیل شامل یک پیوست است."

# --- تنظیمات سرور SMTP ---
smtp_server = "smtp.gmail.com"
smtp_port = 587

# --- ساخت پیام ایمیل (اینجا Multipart لازم داریم) ---
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject

msg.attach(MIMEText(body, 'plain', 'utf-8'))

# --- اضافه کردن پیوست ---
filename = "sample.pdf"  # نام فایل مورد نظر (باید در کنار اسکریپت باشد)

try:
    with open(filename, "rb") as attachment:
        # MIMEBase برای پیوست‌های عمومی
        part = MIMEBase("application", "octet-stream")
        part.set_payload(attachment.read())
    encoders.encode_base64(part) # انکد کردن فایل

    part.add_header(
        "Content-Disposition",
        f"attachment; filename= {filename}",
    )
    msg.attach(part)

except FileNotFoundError:
    print(f"خطا: فایل {filename} پیدا نشد. لطفاً مطمئن شوید فایل در مسیر درست قرار دارد.")
    exit()
except Exception as e:
    print(f"خطا در آماده‌سازی پیوست: {e}")
    exit()

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, msg.as_string())
    server.quit()
    print("ایمیل با پیوست با موفقیت ارسال شد!")
except Exception as e:
    print(f"خطا در ارسال ایمیل با پیوست: {e}")

تو این کد، فایل رو به صورت باینری (`”rb”`) باز می‌کنیم و محتویاتش رو با `part.set_payload()` به آبجکت `MIMEBase` میدیم. بعد با `encoders.encode_base64()` اون رو انکد می‌کنیم و با هدر `Content-Disposition` به ایمیل اضافه می‌کنیم. مهم اینه که برای این کار، پیام اصلی ایمیل باید از نوع `MIMEMultipart` باشه. ابزارهای ما می‌تونن تو کار با انواع فایل‌ها و اسنیپت‌های مربوط به مدیریت فایل‌ها حسابی بهت کمک کنن.

ارسال چندین فایل پیوست

اگه خواستی چندین فایل رو به ایمیلت بچسبونی، کافیه یه حلقه بزنی و هر فایل رو جداگانه به پیام اضافه کنی. کدش تقریباً شبیه کد قبلیه:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os

# ... تنظیمات ایمیل و SMTP مشابه قبل ...
sender_email = "ایمیل_فرستنده@example.com"
receiver_email = "ایمیل_گیرنده@example.com"
password = "رمز_عبور_برنامه_یا_اصلی"
subject = "ایمیل با چندین پیوست"
body = "سلام، این ایمیل شامل چندین پیوست است."
smtp_server = "smtp.gmail.com"
smtp_port = 587

msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain', 'utf-8'))

# لیست فایل‌هایی که می‌خوای بفرستی (این فایل‌ها باید موجود باشن)
filenames = ["sample.pdf", "image.png"] # این فایل‌ها باید موجود باشن

for filename in filenames:
    try:
        with open(filename, "rb") as attachment:
            part = MIMEBase("application", "octet-stream")
            part.set_payload(attachment.read())
        encoders.encode_base64(part)
        part.add_header(
            "Content-Disposition",
            f"attachment; filename= {os.path.basename(filename)}",
        )
        msg.attach(part)
        print(f"فایل {filename} با موفقیت به ایمیل اضافه شد.")
    except FileNotFoundError:
        print(f"هشدار: فایل {filename} پیدا نشد و به ایمیل اضافه نشد.")
    except Exception as e:
        print(f"خطا در پردازش فایل {filename}: {e}")


try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, msg.as_string())
    server.quit()
    print("ایمیل با چندین پیوست با موفقیت ارسال شد!")
except Exception as e:
    print(f"خطا در ارسال ایمیل با چندین پیوست: {e}")

ارسال ایمیل به چندین گیرنده (To, Cc, Bcc): مدیریت مخاطبان

وقتی می‌خوای یه ایمیل رو برای چند نفر بفرستی، از فیلدهای `To` (گیرنده اصلی)، `Cc` (کپی کربن) و `Bcc` (کپی کربن مخفی) استفاده می‌کنی. تفاوت `Cc` و `Bcc` اینه که تو `Cc` همه گیرنده‌ها همدیگه رو می‌بینن، اما تو `Bcc` هویت گیرنده‌ها از هم مخفی می‌مونه. توجح کن که برای `Bcc` باید گیرنده‌ها رو مستقیماً به تابع `sendmail` پاس بدی و نه به هدرهای پیام!

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# ... تنظیمات ایمیل و SMTP مشابه قبل ...
sender_email = "ایمیل_فرستنده@example.com"
password = "رمز_عبور_برنامه_یا_اصلی"
subject = "ایمیل به چندین گیرنده"
body = "سلام به همه رفقا! این یک ایمیل به چندین گیرنده است."
smtp_server = "smtp.gmail.com"
smtp_port = 587

# --- لیست گیرندگان ---
receivers_to = ["گیرنده۱@example.com", "گیرنده۲@example.com"]
receivers_cc = ["کپی۱@example.com"]
receivers_bcc = ["مخفی۱@example.com"]

all_receivers = receivers_to + receivers_cc + receivers_bcc

# --- ساخت پیام ایمیل ---
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = ", ".join(receivers_to)
msg['Cc'] = ", ".join(receivers_cc)
msg['Subject'] = subject

msg.attach(MIMEText(body, 'plain', 'utf-8'))

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, ", ".join(all_receivers), msg.as_string()) # ارسال به همه (To, Cc, Bcc)
    server.quit()
    print("ایمیل به چندین گیرنده با موفقیت ارسال شد!")
except Exception as e:
    print(f"خطا در ارسال ایمیل به چندین گیرنده: {e}")

نکته اصلی اینجا اینه که `msg[‘To’]` و `msg[‘Cc’]` فقط هدرهای ایمیل رو تنظیم می‌کنن و خود `sendmail` باید لیست کامل گیرنده‌ها رو دریافت کنه (که شامل `To`، `Cc` و `Bcc` میشه). این لیست رو ما با `all_receivers` ساختیم و به `sendmail` پاس دادیم.

استفاده از Gmail به عنوان سرور SMTP: راه حلی دم‌دستی

اکثر ما یه اکانت Gmail داریم و استفاده از اون به عنوان سرور SMTP، یه راه حل سریع و در دسترسه. اما یه نکته مهم داره: گوگل برای افزایش امنیت، اجازه نمیده اپلیکیشن‌هایی که کمتر امن هستن (مثل همین اسکریپت ما) با رمز عبور اصلی اکانتت لاگین کنن. برای همین باید از “App Password” (رمز عبور برنامه) استفاده کنی.

پیش‌نیازها برای Gmail

  • فعال کردن تأیید هویت دو مرحله‌ای (2-Step Verification): اول باید این قابلیت رو برای اکانت Gmail خودت فعال کنی.
  • ساخت App Password: بعد از فعال کردن تأیید هویت دو مرحله‌ای، می‌تونی از بخش تنظیمات امنیتی گوگل، یه “App Password” بسازی. این رمز عبور ۱۶ رقمی رو باید به جای رمز عبور اصلی اکانتت تو کد پایتون وارد کنی.

مسیر ساخت App Password: برو به myaccount.google.com/security > بخش “How you sign in to Google” > “App passwords”.

کد آماده برای ارسال ایمیل با Gmail

کد زیر دقیقاً مشابه کدهای قبلیه، فقط مطمئن شو که sender_email یک اکانت Gmail باشه و password هم همون App Password که ساختی.

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# --- تنظیمات ایمیل ---
sender_email = "ایمیل_تو@gmail.com"  # حتماً یک ایمیل Gmail باشه
receiver_email = "ایمیل_گیرنده@example.com"
password = "App_Password_16_رقمی_تو_اینجا" # رمز عبور برنامه، نه رمز اصلی گوگل!
subject = "تست ایمیل با Gmail و پایتون"
body = "این ایمیل از طریق اکانت Gmail و پایتون ارسال شده."

# --- تنظیمات سرور SMTP برای Gmail ---
smtp_server = "smtp.gmail.com"
smtp_port 587 # این پورت برای TLS است

# --- ساخت پیام ایمیل ---
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain', 'utf-8'))

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, msg.as_string())
    server.quit()
    print("ایمیل از طریق Gmail با موفقیت ارسال شد!")
except Exception as e:
    print(f"خطا در ارسال ایمیل از طریق Gmail: {e}")

بهترین روش‌ها و نکات حرفه‌ای برای ارسال ایمیل با پایتون

تا اینجا کدهای اساسی رو یاد گرفتی، اما برای اینکه پروژه‌ت جون بگیره و ایمیل‌هات بدون مشکل ارسال بشن، چند تا نکته حرفه‌ای هست که باید بهشون اطمینانن داشته باشی:

  • مدیریت خطا (try-except): همیشه کدهای ارسال ایمیل رو داخل بلوک try-except قرار بده تا اگه مشکلی پیش اومد (مثل قطع شدن اینترنت، اشتباه بودن رمز عبور یا سرور), برنامه‌ت کرش نکنه و بتونی خطا رو مدیریت کنی.
  • امنیت (SSL/TLS): همیشه از starttls() برای رمزنگاری ارتباط با سرور SMTP استفاده کن (پورت 587). اگه سرور شما از SSL مستقیم پشتیبانی می‌کنه (پورت 465)، از smtplib.SMTP_SSL استفاده کن.
  • فایل‌های پیکربندی: اطلاعات حساس مثل رمز عبور و ایمیل فرستنده رو مستقیماً تو کد ننویس. اون‌ها رو تو فایل‌های تنظیمات (مثل .env یا JSON) ذخیره کن و موقع اجرا از اون‌ها بخون.
  • محدودیت‌های ارسال (Rate Limits): بعضی از سرورها (مثل Gmail) محدودیت‌هایی برای تعداد ایمیل‌های ارسالی در یک بازه زمانی دارن. اگه حجم ایمیل‌هات زیاده، حواست به این محدودیت‌ها باشه و از تاخیر (delay) بین ارسال‌ها استفاده کن.
  • طراحی رسپانسیو برای ایمیل‌های HTML: اگه ایمیل HTML می‌فرستی، مطمئن شو که برای موبایل هم به خوبی نمایش داده میشه. می‌تونی از اسنیپت‌های CSS ما برای یادگیری اصول طراحی رسپانسیو کمک بگیری.
  • سرورهای ایمیل خارجی: اگر حجم ارسال ایمیل‌های شما زیاد است، بهتر است از سرویس‌های تخصصی ارسال ایمیل مانند SendGrid, Mailgun یا Amazon SES استفاده کنید که APIهای پایتون هم دارند.

جدول مقایسه: smtplib و کتابخانه‌های سطح بالاتر (مثل yagmail)

ماژول‌های استاندارد smtplib و email قدرت زیادی بهت میدن، اما گاهی اوقات برای سادگی بیشتر، می‌تونی از کتابخانه‌های شخص ثالث استفاده کنی. yagmail یه نمونه از این کتابخانه‌هاست که کار رو خیلی آسون‌تر می‌کنه.

ویژگی `smtplib` و `email` (استاندارد)
پیچیدگی کدنویسی نسبتاً بالاتر؛ نیاز به مدیریت دستی MIMEType و هدرها
نصب نیازی به نصب ندارد (built-in)
کنترل دقیق کنترل کامل بر روی تمام جزئیات ایمیل و SMTP
پشتیبانی از Gmail نیاز به App Password و تنظیم دستی سرور و پورت
کاربرد پروژه‌های پیچیده، نیاز به سفارشی‌سازی بالا، فهم عمیق پروتکل

همونطور که می‌بینی، ماژول‌های استاندارد پایتون بهت کنترل خیلی بیشتری میدن، در حالی که کتابخانه‌های شخص ثالث مثل yagmail برای سادگی و سرعت بالاتر تو پروژه‌های کوچکتر مناسب‌ترن. انتخاب با خودته، بستگی به نیاز پروجح پروجح تو داره.

عیب‌یابی سریع (Troubleshooting): مشکلات رایج و راه‌حل‌ها

گاهی اوقات همه چی طبق برنامه پیش نمیره و تو ارسال ایمیل با مشکلاتی روبرو میشی. نگران نباش، این طبیعیه! اینجا چند تا از مشکلات رایج و راه حل‌هاشون رو با هم بررسی می‌کنیم:

  • `smtplib.SMTPAuthenticationError: 535-5.7.8 Username and Password not accepted`

    مشکل: نام کاربری یا رمز عبور اشتباهه.

    راه‌حل:

    • برای Gmail: مطمئن شو که App Password درست رو وارد کردی. (به بخش “استفاده از Gmail” مراجعه کن).
    • برای سایر سرویس‌ها: دوباره نام کاربری و رمز عبور رو چک کن. گاهی اوقات سرویس‌دهنده‌ها گزینه “Less secure app access” رو دارن که باید فعالش کنی (اگرچه توصیه نمیشه و بهتره از App Password یا OAuth استفاده کنی).
    • ممکنه لازم باشه تنظیمات امنیتی فایروال یا آنتی‌ویروس رو چک کنی.
  • `socket.gaierror: [Errno 11001] getaddrinfo failed` یا `ConnectionRefusedError: [WinError 10061]`

    مشکل: پایتون نمی‌تونه به سرور SMTP وصل بشه.

    راه‌حل:

    • آدرس سرور SMTP (مثلاً smtp.gmail.com) رو دقیقاً چک کن.
    • پورت SMTP (معمولاً 587) رو چک کن.
    • اتصال اینترنت خودت رو بررسی کن.
    • گاهی اوقات VPN یا پروکسی باعث این مشکل میشه. سعی کن با قطع کردن اون‌ها دوباره تست کنی.
  • ایمیل ارسال میشه اما گیرنده اون رو تو اسپم دریافت می‌کنه.

    مشکل: ایمیلت به عنوان هرزنامه شناسایی میشه.

    راه‌حل:

    • از یک دامنه معتبر برای ایمیل فرستنده استفاده کن.
    • مطمئن شو که محتوای ایمیلت (به خصوص HTML) استاندارد و بدون لینک‌های مشکوک باشه.
    • از سرورهای SMTP معروف و معتبر استفاده کن (مثل Gmail یا سرویس‌های پولی مثل SendGrid).
  • مشکلات انکدینگ (Encoding) کاراکترهای فارسی

    مشکل: حروف فارسی تو ایمیل به هم ریخته نمایش داده میشه.

    راه‌حل:

    • مطمئن شو که در تمام قسمت‌های کد، از utf-8 برای انکدینگ استفاده کردی. مثلاً MIMEText(body, 'plain', 'utf-8').

تماس با ما

اگه بازم مشکل یا سوالی داری یا نیاز به کدهای سفارشی برای پروجح خاصی داری، با ما تماس بگیر!

📞 09202232789

سخن پایانی و دعوت به ادامه یادگیری

خب رفیق، تا اینجا با هم یه سفر کامل رو تو دنیای ارسال ایمیل با پایتون داشتیم. از ارسال یه پیام ساده گرفته تا ایمیل‌های HTML با پیوست و حتی مدیریت چند گیرنده، همه رو با کدهای آماده و توضیحات کامل یاد گرفتی. حالا دیگه وقتشه که این دانش رو عملی کنی و ایمیل‌های پروژه‌هات رو به دست گیرنده‌ها برسونی!

فراموش نکن که دنیای برنامه‌نویسی پر از ابزارهای جذاب و کدهای کاربردیه. برای اینکه همیشه به‌روز باشی و بهترین کدهای آماده رو در دسترست داشته باشی، حتماً یه سر به مجموعه اسنیپت‌های ما بزن. اونجا می‌تونی کلی کد جاوااسکریپت، CSS، HTML و حتی وردپرس پیدا کنی که حسابی به دردت می‌خورن. ما همیشه در تلاشیم تا بهترین و کاربردی‌ترین ابزارها و اسنیپت‌ها رو برات آماده کنیم.

پس منتظر چی هستی؟ شروع کن و پروژه‌هاتو با قدرت پایتون و ابزارهای ما به مرحله بعدی ببر! برای شروع، می‌تونی همین حالا از صفحه اصلی fa-tools.ir دیدن کنی.

Table of Contents

آخرین نوشته‌ها