کتابخانه smtplib در پایتون
کتابخانه smtplib یکی از ماژولهای داخلی پایتون است که برای ارسال ایمیل از طریق پروتکل SMTP (Simple Mail Transfer Protocol) مورد استفاده قرار میگیرد. این کتابخانه به توسعهدهندگان اجازه میدهد تا بدون نیاز به نصب هیچ پکیج خارجی، از طریق سرورهای ایمیل مانند Gmail، Yahoo، Outlook یا سرورهای اختصاصی، ایمیل ارسال کنند.
مفهوم SMTP چیست؟
SMTP مخفف Simple Mail Transfer Protocol است و یکی از قدیمیترین پروتکلهای ارتباطی برای انتقال ایمیلها در شبکه محسوب میشود. این پروتکل وظیفه دارد ایمیلها را از کلاینت (برنامه پایتون) به سرور و سپس به گیرنده ارسال کند.
ویژگیهای کتابخانه smtplib
- ارسال ایمیل از طریق هر سرور SMTP (مثلاً Gmail، Yahoo، و غیره)
- پشتیبانی از رمزنگاری SSL و TLS برای امنیت بیشتر
- قابلیت لاگگیری و دیباگ آسان
- ارسال ایمیلهای متنی و HTML
- ارسال فایلهای پیوست (Attachment) با ترکیب کتابخانههای دیگر مانند email.mime
نحوه استفاده از smtplib برای ارسال ایمیل
۱. وارد کردن کتابخانهها
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
در این مثال، از smtplib برای ارسال ایمیل و از email.mime برای ساختاردهی محتوای ایمیل استفاده میکنیم. کلاس MIMEMultipart برای ایمیلهای چندبخشی (مثلاً شامل متن و فایل) کاربرد دارد.
۲. تنظیم اطلاعات ایمیل
sender_email = "your_email@gmail.com"
receiver_email = "receiver@example.com"
password = "your_password"
message = MIMEMultipart("alternative")
message["Subject"] = "Test Email from Python"
message["From"] = sender_email
message["To"] = receiver_email
text = """
Hi,
This is a test email sent from Python using smtplib.
"""
message.attach(MIMEText(text, "plain")) در این مرحله، اطلاعات پایه مانند فرستنده، گیرنده، موضوع و متن ایمیل را تنظیم میکنیم. توجه داشته باشید که برای امنیت بیشتر بهتر است از رمز عبور برنامه (App Password) در Gmail استفاده شود، نه رمز اصلی حساب کاربری.
۳. اتصال به سرور SMTP و ارسال ایمیل
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls() # فعالسازی TLS
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
print("Email sent successfully!")
در اینجا از پورت 587 برای اتصال TLS استفاده شده است. متد starttls() اتصال را رمزنگاری میکند تا اطلاعات حساس شما ایمن بماند. سپس با login() وارد حساب میشویم و با sendmail() ایمیل ارسال میگردد.
۴. استفاده از SSL بهجای TLS
برای افزایش امنیت، میتوانید از SMTP_SSL استفاده کنید که مستقیماً ارتباط ایمن برقرار میکند:
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
در این حالت نیازی به فراخوانی starttls() نیست زیرا ارتباط از ابتدا امن است.
ارسال ایمیل HTML با smtplib
html = """Hello from Python!
This is an HTML email sent using smtplib.
“”” message.attach(MIMEText(html, “html”))
در این مثال، یک نسخه HTML از پیام ایجاد کردهایم. با MIMEText(html, "html") مشخص میکنیم که محتوا بهصورت HTML ارسال شود.
ارسال فایل پیوست (Attachment)
from email.mime.base import MIMEBase
from email import encoders
filename = "example.txt"
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= {filename}",
)
message.attach(part) در این مثال، فایل example.txt به ایمیل پیوست شده است. تابع encode_base64() دادههای فایل را به فرمت امن Base64 تبدیل میکند تا در انتقال ایمیل دچار مشکل نشود.
فعال کردن تنظیمات Gmail برای smtplib
برای اینکه بتوانید از طریق Gmail ایمیل ارسال کنید، باید تنظیمات امنیتی خاصی را فعال کنید:
- در بخش امنیت حساب گوگل خود، App Password ایجاد کنید.
- دسترسی به «کمامنیت» را غیرفعال بگذارید، زیرا دیگر پشتیبانی نمیشود.
- از App Password در فیلد
passwordاستفاده کنید.
رفع خطاهای متداول
| کد خطا | توضیح | راهحل |
|---|---|---|
| 535 | Authentication failed | از App Password استفاده کنید و تنظیمات امنیتی Gmail را بررسی نمایید. |
| 550 | Relay access denied | احتمالاً گیرنده نامعتبر است یا سرور SMTP محدودیت دارد. |
| 421 | Service not available | سرور ایمیل موقتاً از دسترس خارج شده است. |
بهترین شیوهها (Best Practices)
- از متغیرهای محیطی یا فایلهای امن برای ذخیره رمز عبور استفاده کنید.
- در برنامههای واقعی، از کتابخانههایی مانند dotenv یا keyring برای مدیریت رمزها استفاده نمایید.
- در صورت ارسال ایمیلهای زیاد، از صف ارسال و زمانبندی (Scheduling) استفاده کنید.
- برای مانیتورینگ بهتر، لاگ ارسال ایمیلها را ذخیره کنید.
نمونه کامل کد ارسال ایمیل با smtplib
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email(sender, receiver, password, subject, body):
msg = MIMEMultipart()
msg["From"] = sender
msg["To"] = receiver
msg["Subject"] = subject
```
msg.attach(MIMEText(body, "plain"))
try:
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
server.login(sender, password)
server.sendmail(sender, receiver, msg.as_string())
print("Email sent successfully!")
except Exception as e:
print(f"Error: {e}")
```
send_email(
"[your_email@gmail.com](mailto:your_email@gmail.com)",
"[receiver@example.com](mailto:receiver@example.com)",
"your_app_password",
"Test Email",
"This is a simple email sent using Python."
) این تابع تمامی مراحل ارسال ایمیل را در قالب یک تابع ساده انجام میدهد و خطاهای احتمالی را نیز مدیریت میکند. این ساختار برای استفاده در پروژههای واقعی بسیار کارآمد است.
جمعبندی
کتابخانه smtplib یک ابزار قدرتمند و ساده برای ارسال ایمیل در پایتون است. با ترکیب آن با ماژول email میتوان ایمیلهای حرفهای شامل متن، HTML و فایل پیوست ارسال کرد. استفاده از روشهای ایمن مانند TLS یا SSL و App Password برای حفظ امنیت حساب کاربری، یکی از مهمترین اصول در استفاده از این کتابخانه است.
آیا این مطلب برای شما مفید بود ؟




