ارسال ایمیل در پایتون

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

 

پروتکل SMTP چیست ؟

SMTP یا Simple Mail Transfer Protocol یکی از پروتکل های TCP/IP برای ارسال و دریافت ایمیل (نامه های الکترونیکی) است. این پروتکل امکان ذخیره سازی نامه ها را روی یک سرور یا دانلود آنها از سرور را فراهم میکند. به طور کاربردی تر میتوان گفت از پروتکل SMTP میتوان برای ارسال ایمیل و مدیریت آنها بین سرورهای مختلف استفاده کرد.

 

استفاده از SMTP در پایتون

در پایتون یک ماژول به نام smtplib وجود دارد که با استفاده از آن میتوان عملیات ارسال ایمیل را انجام داد.

با استفاده از این ماژول اطلاعاتی که در یک ارتباط و نشست با سرور سرویس دهنده ایمیل نیاز داریم را به صورت یک شئ نگهداری کرده و از آن ها برای ارسال ایمیل از طریق آن سرور استفاده خواهد کرد.

با استفاده از این ماژول خواهیم توانست ایمیل خود را با کمک سرور سرویس دهنده ای که دارای سرویس SMTP یا ESMTP باشد ارسال کنیم.

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

import smtplib

 

حال به صورت زیر میتوان یک شئ برای اتصال به سرور سرویس دهنده ایجاد کرد.

server = smtplib.SMTP(host="SERVER_ADDRESS", port="SERVER_PORT")

 

پورت پیشفرض SMTP شماره 25 است اما بسته به سرویس دهنده ایمیل، میتواند هر عدد دیگری باشد.

به صورت ساده تر میتوان مقادیر فوق را به صورت یک رشته به سازنده داد.

server = smtplib.SMTP("SERVER_ADDRESS:SERVER_PORT")

 

همانطور که میبینید میتوان یک رشته با ساختار استاندارد آدرس:پورت به جایی تعیین دو مقدار به صورت مجزا تعریف کرد.

 

ارسال ایمیل متنی در پایتون

برای ارسال ایمیل از طریق پروتکل SMTP در پایتون میتوان مراحل زیر را انجام داد.

  • ایجاد یک شئ SMTP برای ارتباط با سرور
  • وارد شدن به حساب کاربری ایمیل
  • تعریف اطلاعات پیام و گواهی نامه های تایید هویت
  • ایجاد یک شئ پیام چندگانه (MIMEMultipart) و الصاق اطلاعات ایمیل به آن (نظیر فرستنده، گیرنده و …)
  • الصاق متن محتوای ایمیل به شئ پیام
  • ارسال ایمیل

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

ابتدا ماژول های مورد نیاز و کلاس های آنها را به برنامه خود اضافه میکنیم.

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

 

سپس یک شئ پیام ایجاد میکنیم تا بتوانیم اطلاعات مربوط به پیام را به آن اضافه کنیم.

msg = MIMEMultipart()

 

حال پارامترهای مربوط به ایمیل را تنظیم میکنیم. پارامترهای زیر، پارامترهای اصلی برای ارسال یک ایمیل هستند. اطلاعاتی نظیر رمز عبور حساب ایمیل، نام کاربری (آدرس ایمیل)، آدرس مقصد و عنوان پیام.

password = "EMAIL_PASSWORD"
msg['From'] = "YOUR_EMAIL"
msg['To'] = "RECIEVER_EMAIL"
msg['Subject'] = "EMAIL_SUBJECT"

 

میتوان اطلاعات دیگری را نیز در این بخش تنظیم کرد؛ نظیر آدرس دریافت پاسخ (reply_to) یا …

 

تعریف متن ایمیل

حال یک متن تستی آماده کرده و آنرا با استفاده از تابع attach به پیام خود ضمیمه میکنیم.

message = "Hello, This is a test from SabzElco!"
msg.attach( MIMEText(message, 'plain') )

 

برقراری ارتباط با سرور سرویس دهنده

اکنون آدرس سرور و پورت سرویس دهنده را مشخص کرده و با متد starttls() سعی میکنیم یک ارتباط ایمن https با سرور برقرار کنیم.

server = smtplib.SMTP('smtp.server.com: 25')
server.starttls()

 

همزمان با برقراری ارتباط https با سرور، اطلاعاتی که مرتبط با این ارتباط است (نظیر گواهی نامه ها یا credentials) در شئ server ذخیره شده و در ارسال درخواست های بعدی مورد استفاده قرار خواهد گرفت.

ورود به حساب کاربری

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

server.login(msg['From'], password)

 

در صورتی که خطایی تا کنون دریافت نکرده اید، به شما تبریک میگویم! شما با موفقیت به سرور سرویس دهده متصل شده اید.

اکنون نوبت ارسال ایمیل است!

ارسال ایمیل

تابعی با نام sendmail() در شئ server وجود دارد که سه پارامتر اصلی دریافت میکند.

  • پارامتر اول، مشخص کننده ارسال کننده ایمیل
  • پارامتر دوم، مشخص کننده دریافت کننده ایمیل (آدرس مقصد)
  • پارامتر سوم، یک رشته که حاوی اطلاعات ایمیل است. (header ها و متن ایمیل)
server.sendmail( msg['From'], msg['To'], msg.as_string() )

 

با صدا زدن این متد، در صورتی که خطایی دریافت نکنید، ارسال ایمیل با موفقیت انجام شده است.

 

در نهایت با صدا زدن متد quit() تمام اطلاعات مربوط به اتصال و حساب کاربری را حذف میکنیم.

server.quit()

 

توجه داشته باشید که آدرس فرستنده و گیرنده را علاوه بر اینکه در متد ارسال ایمیل تعریف کردیم، به عنوان سرآیند (header) ایمیل نیز در قسمت متنی ایمیل وارد کرده بودیم.

 

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

به طور خلاصه، فرآیند ارسال یک ایمیل متنی ساده در پایتون به صورت زیر خواهد بود.

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

msg = MIMEMultipart()

password = "EMAIL_PASSWORD"
msg['From'] = "YOUR_EMAIL"
msg['To'] = "RECIEVER_EMAIL"
msg['Subject'] = "EMAIL_SUBJECT"

message = "Hello, This is a test from SabzElco!"
msg.attach( MIMEText(message, 'plain') )

server = smtplib.SMTP('smtp.server.com: 25')
server.starttls()

server.login(msg['From'], password)

server.sendmail( msg['From'], msg['To'], msg.as_string() )

server.quit()

 

ارسال ایمیل با فایل ضمیمه در پایتون

فرآیند ارسال یک فایل به صورت ضمیمه همراه با متن ایمیل کاملاً مشابه ارسال ایمیل متنی معمولی است. با این تفاوت که باید فایل را خوانده و آنرا به فرمت MIME تبدیل کنیم. فرمت MIME مربوط به تصاویر با کلاس MIMEImage شناخته میشود.

ابتدا این کلاس را به برنامه خود وارد میکنیم.

from email.MIMEImage import MIMEImage

 

حال پس از ضمیمه کردن متن ایمیل، به طور مشابه، یک فایل تصویر با نام picture.jpg را نیز ضمیمه ایمیل میکنیم.

msg.attach( MIMEImage( file("picture.jpg").read() ) )

 

باقی کارهای مورد نیاز برای ارسال ایمیل، مشابه قبل خواهد بود!

فرمت های مختلفی برای MIME وجود دارد که میتوانیم از کلاس مربوط به آن برای ضمیمه کردن فایل هایی با دیگر فرمت ها استفاده کرد. کلاس هایی نظیر MIMEMessage یا MIMEAudio

 

ارسال ایمیل با قالب HTML

گاهی اوقات نیاز داریم برای زیباتر شدن ساختار ایمیل خود، از قالب های HTML استفاده کنیم. فرآیند ارسال ایمیل با قالب HTML نیز تقریبا مشابه ارسال ایمیل متنی است؛ با مقداری تفاوت!

ابتدا باید قالب HTML خود را برای ارسال ایمیل آماده کنیم. از آنجا که این مسئله خارج از بحث آموزش ماست، فرض میکنیم ساختار ساده زیر را برای ارسال داریم.

<html>
<head>
<title>عنوان پیام</title>
</head>
<body>
<h1>این یک عنوان آزمایشی از سایت تخصصی الکترونیک و کامپیوتر است!</h1>
<p>یک پاراگراف آزمایشی در قالب ایمیل</p>
</body>
</html>

 

ارسال ایمیل در پایتون

ابتدا بایستی ماژول های مورد نیاز برای ارسال ایمیلرا به برنامه خود اضافه کرد.

import smtplib
import email.message

 

حال محتوای ایمیل را مشخص میکنیم.

Email_content = """
<html><head>
<title>عنوان پیام</title>
</head><body>
<h1>این یک عنوان آزمایشی از سایت تخصصی الکترونیک و کامپیوتر است!</h1>
<p>یک پاراگراف آزمایشی در قالب ایمیل</p>
</body></html>
"""

 

سپس باید یک شئ برای پیام ایجاد کنیم. اطلاعات مربوط به حساب کاربری را نیز برای آن تعریف میکنیم.

msg = email.message.Message()
msg['Subject'] = "ارسال ایمیل با قالب خاص"
msg['From'] = "YOUR_EMAIL"
msg['To'] = "RECIEVER_EMAIL"
password = "EMAIL_PASSWORD"

 

بخشی متفاوت کار ما اینجاست! به عنوان یک سرآیند (header) برای پیام ارسالی، مشخص میکنیم که نوع محتوای ما HTML است.

msg.add_header('Content-Type', 'text/html')

 

و پس از آن محتوای ایمیل را به پیام می چسبانیم. (ضمیمه میکنیم)

msg.set_payload(email_content)

 

سایر کارها مشابه قبل است. یک شئ برای برقراری ارتباط با سرور ایجاد میکنیم. وارد حساب کاربری خود شده و اقدام به ارسال پیام خود میکنیم.

server = smtplib.SMTP('smtp.server.com:25')
server.starttls()
server.login( msg['From'], password )
server.sendmail( msg['From'], msg['To'], msg.as_string() )

 

خلاصه مقاله

در این مقاله آموزشی دیدیم که چطور با استفاده از ماژول smtplib پایتون میتوانیم به راحتی یک ایمیل ارسال کنیم. برای ارسال ایمیل در پایتون ابتدا باید به سرور سرویس دهنده متصل شده و پس از احراز هویت، اقدام به ارسال ایمیل کنیم.

همچنین میتوان همراه با ایمیل خود فایل هایی را به عنوان ضمیمه ارسال کرد. و محتوای ایمیل ارسالی را به صورت قالب HTML تعریف کرد.