آموزش ارسال ایمیل در پایتون
در این ویدیو با نحوه ارسال ایمیل با پایتون آشنا خواهید شد. پایتون از ماژول smtplib برای اتصال به سرویس دهندگان ایمیل استفاده میکند. این پکیج جزو کتابخانه استاندارد پایتون بوده و نیاز به نصب ندارد. در این آموزش مواردی مثل ارسال ایمیل متنی ساده با پایتون، ارسال فایل ضمیمه در ایمیل با پایتون و ارسال قالب html در ایمیل با پایتون و اتصال به سرور smtp برای ارسال ایمیل با پایتون را یاد میگیرید.
ما به راحتی می توانیم فرآیند ارسال ایمیل با استفاده از پایتون را خودکار کنیم. ارسال ایمیل با پایتون زمانی مفید است که بخواهید محتوای مشابه را بارها و بارها ارسال کنید. این اتوماسیون می تواند خطاهای انسانی را کاهش دهد و زمان شما را نیز آزاد کند!
به عنوان مثال، اگر نیاز دارید لیستی از مخاطبین را بر اساس داده های روزانه جدید به روز کنید، می توانید از پایتون برای ایجاد یک گزارش جدید استفاده کنید و با ارسال ایمیل آن را با آنها به اشتراک بگذارید. یا اگر یک برنامه پایتون دارید که اجرای آن زمان زیادی می برد، می توانید از پایتون بخواهید پس از اتمام کار، یک ایمیل یادآور برای شما ارسال کند.
قبل از شروع به ارسال ایمیل با پایتون، باید حساب کاربری گوگل خود را آماده کنید تا بتوانید با پایتون به Gmail وصل شوید.
محتویات این صفحه:
استفاده از SMTP برای ارسال ایمیل با پایتون
استفاده از SMTP_SSL برای ارسال ایمیل با پایتون
# آماده کردن حساب کاربری گوگل برای ارسال ایمیل در پایتون
قبل از شروع به ارسال ایمیل با پایتون باید حساب کاربری گوگل را آماده کنید. در این آموزش ما از سرور Gmail برای ارسال ایمیل با پایتون استفاده میکنیم اما همین اصول در مورد سایر سرویسهای ایمیل نیز صدق میکند. دقت کنید که استفاده از سرور Gmail برای زمانی مناسب است که تعداد ایمیل های ارسالی زیاد نباشد. اگر قرار است تعداد زیادی ایمیل برای مصارف تبلیغاتی ارسال کنید، بهتر است از سرویس دهندگان ایمیل پولی استفاده کنید.
برای اینکه بتوانید با پایتون به gmail متصل شوید، باید یک app passwords جدید در حساب کاربری گوگل خود ایجاد کنید. برای اینکار وارد تنظیمات حساب کاربری گوگل به آدرس myaccount.google.com شوید:
سپس در سمت چپ همین صفحه روی گزینه Security کلیک کنید. در این صفحه کمی به پایین اسکرول کرده تا به بخش Signing in to Google برسید. در این بخش روی گزینه App passwords کلیک کنید:
در صفحه جدیدی که باز میشود میتوانید یک app بسازید تا پایتون به آن متصل شود. روی گزینه select app کلیک کنید تا یک لیست باز شود. سپس روی گزینه Other(custom name) کلیک کنید:
بعد از کلیک روی گزینه Other بخش جدید ایجاد خواهد شد که باید یک نام به برنامه خود بدهید. میتوانید هر نام دلخواهی انتخاب کنید:
بعد از انتخاب نام مناسب روی دکمه GENERATE کلیک کنید تا یک رمز عبور برای شما ساخته شود. این رمز را یادداشت کنید تا بعدا بتوانیم از آن استفاده کنیم:
حالا حساب کاربری گوگل شما آماده است. میتوانید با پایتون به Gmail وصل شده و ایمیل ارسال کنید.
ویدیو پیشنهادی: آموزش duck typing در پایتون
# ارسال ایمیل متنی با پایتون
قبل از اینکه به ارسال ایمیل با محتوای HTML و فایل ضمیمه بپردازیم، یاد خواهید گرفت که با استفاده از پایتون ایمیلهای متنی ساده ارسال کنید. پایتون برای ارسال ایمیل از SMTP استفاده میکند. اما پروتکل smtp چیست؟
پروتکل smtp مخفف Simple Mail Transfer Protocol به معنی پروتکل ساده انتقال نامه است. پروتکل smtp روشی است که با استفاده از آن میتوان اقدام به ارسال و دریافت ایمیل کرد. هر سرور smtp دارای یک آدرس است که سرویس گیرنده ایمیل مورد استفاده قرار گیرد. مثلا آدرس سرور Gmail گوگل smtp.gmail.com است.
هنگامی که ایمیلی را با پروتکل SMTP و میزبانی جیمیل ارسال می کنید، سرور SMTP ایمیل شما را پردازش می کند، تصمیم می گیرد که پیام را به کدام سرور ارسال کند و پیام را به آن سرور ارسال می کند. سپس ارائهدهنده خدمات صندوق ورودی گیرنده، مانند Gmail، پیام را دانلود کرده و در صندوق ورودی گیرنده قرار میدهد.
دو راه برای شروع یک اتصال امن با سرور ایمیل شما وجود دارد:
- یک اتصال SMTP ناامن راه اندازی کنید که بعد باید با استفاده از starttls رمزگذاری کنید.
- یک اتصال SMTP که از ابتدا با استفاده از SMTP_SSL ایمن شده است.
+ استفاده از SMTP برای ارسال ایمیل با پایتون
در روش اول، ابتدا یک اتصال ناامن با استفاده از کلاس SMTP ایجاد میکنیم که بعدا مجبوریم با استفاده از توابع ehlo و starttls آن را ایمن کنیم. به کد زیر دقت کنید:
import smtplib
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'amirbig44@gmail.com'
EMAIL_HOST_PASSWORD = 'kn58ln2ylnx2j9'
EMAIL_HOST_PORT = 587
with smtplib.SMTP(EMAIL_HOST, EMAIL_HOST_PORT) as server:
server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
server.starttls()
server.ehlo()
# TODO: sending email
در خط اول کد بالا، ماژول smtplib را وارد کردهایم. سپس اطلاعاتی که برای اتصال به Gmail داریم را در چهار متغیر پایتون ذخیره میکنیم. چهار متغیر بالا به ترتیب زیر هستند:
- سرور smtp که قرار است به آن متصل شویم. در گوگل این مقدار
smtp.gmail.com
است اما در سرویس دهندگان دیگر متفاوت است. - کاربری که قرار است از حسابش ایمیل ارسال کنیم.
- رمز عبوری که در بخش app password ایجاد کردیم.
- پورتی سرور به ما اجازه دسترسی میدهد. درمورد گوگل این عدد 587 است اما برای دیگر سرویس دهندگان ممکن است متفاوت باشد.
بعد از مشخص کردن اطلاعات اتصال، با استفاده از کلمه کلیدی with یک context manager باز کرده و داخل آن از کلاس SMTP استفاده میکنیم. این کلاس مقادیر هاست و پورت هاست را نیاز دارد. دلیل اینکه این اتصال را با یک context manage برقرار کردیم اینست که میخواهیم بعد از اتمام عملیات، اتصال به سرور Gmail به صورت اتوماتیک بسته شود.
مرحله بعد لاگین کردن در سرویس Gmail است. برای استفاده از سرویس دهندگان ایمیلی که نیاز به اعتبارسنجی کاربر دارند، میتوانید از تابع login استفاده کنید. این تابع دو مقدار کاربر و رمز عبور را گرفته و کاربر را اعتبارسنجی میکند.
در آخر با تابع starttls اتصال خود را رمزگذاری میکنیم تا یک اتصال ایمن ایجاد شود و با استفاده از تابع ehlo خودمان را به عنوان کاربر معتبر معرفی میکنیم. این تابع به صورت اتوماتیک توسط پایتون صدا زده میشود و میتوانید آن را ننویسید.
حالا نوبت ارسال ایمیل با پایتون است. برای ارسال ایمیل باید از تابع sendmail استفاده کنید:
with smtplib.SMTP(EMAIL_HOST, EMAIL_HOST_PORT) as server:
server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
server.starttls()
server.sendmail(EMAIL_HOST_USER, 'mongard.amir@gmail.com', 'Hello Python!')
تابع sendmail که برای ارسال ایمیل با پایتون استفاده میشود، سه مقدار ایمیل مبدا، ایمیل مقصد و پیغام ارسالی را میگیرد. بعد از اجرا کردن کد بالا، کدتان نباید هیچ خروجی داشته باشد و ایمیل با موفقیت ارسال شود.
ویدیو پیشنهادی: آموزش درک ترتیب اجرا کدها در پایتون
+ استفاده از SMTP_SSL برای ارسال ایمیل با پایتون
روش دوم برای ایجاد اتصال، استفاده مستقیم از SMTP_SSL است که از ابتدا یک اتصال ایمن بوده و نیازی به اضافه کرده رمزگذاری ندارد. به کد زیر دقت کنید:
with smtplib.SMTP_SSL(EMAIL_HOST, EMAIL_HOST_PORT) as server:
server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
server.sendmail(EMAIL_HOST_USER, 'mongard.amir@gmail.com', 'Hello Python!')
در کد بالا دیگر نیازی به توابعی مانند ehlo یا starttls نداریم و مستقیما بعد از login میتوانید ایمیل را ارسال کنید.
# ارسال ایمیل با فایل ضمیمه در پایتون
پایتون یک پکیج داخلی به نام email دارد که از آن برای ساختاردهی به ایمیل ها استفاده میشود. با این پکیج میتوانید ایمیل هایتان را با کدهای html استایل دهید و یا به ایمیلتان فایل ضمیمه اضافه کنید. این پکیج به چند بخش مختلف تقسیم میشود. بخشی که ما به آن نیاز داریم بخش message است.
به کد زیر دقت کنید:
import smtplib
from email.message import EmailMessage
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'amirbig44@gmail.com'
EMAIL_HOST_PASSWORD = 'kn58ln2ylnx2j9'
EMAIL_HOST_PORT = 587
msg = EmailMessage()
msg['Subject'] = 'Greeting'
msg['From'] = EMAIL_HOST_USER
msg['To'] = 'mongard.amir@gmail.com'
msg.set_content('Thank you python!')
with smtplib.SMTP_SSL(EMAIL_HOST, EMAIL_HOST_PORT) as server:
server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
server.send_message(msg)
در کد بالا بعد از وارد کردن کلاس EmailMessage، یک آبجکت جدید به نام msg از این کلاس میسازیم. مواردی که نیاز است در آبجکت msg مشخص کنید به ترتیب، موضوع، فرستنده، گیرنده و متن ایمیل است. دقت کنید که برای اضافه کردن متن ایمیل از تابع set_content استفاده کرده ایم. از آنجایی که در حال ارسال یک message هستید باید از تابع send_message استفاده کنید برای ارسال ایمیل استفاده کنید.
در پکیج email تابعی به نام add_attachment وجود دارد که برای اضافه کرده فایل ضمیمه به ایمیل استفاده میشود.
به کد زیر دقت کنید:
with open('logo.png', 'rb') as f:
file_data = f.read()
file_name = f.name
msg.add_attachment(file_data, maintype='image', subtype='png', filename=file_name)
with smtplib.SMTP_SSL(EMAIL_HOST, EMAIL_HOST_PORT) as server:
server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
server.send_message(msg)
در کد بالا، ابتدا یک تصویر png را در حالت خواندن باینری باز کرده و محتوای آن را در متغیر file_data و نام تصویر را در متغیر file_name ذخیره میکنیم.
سپس با استفاده از تابع add_attachment فایل را به ایمیل اضافه میکنیم. در این تابع ابتدا محتویات فایل و سپس به ترتیب نوع اصلی فایل، پسوند فایل و نام فایل را ارسال کرده ایم. حالا میتوانید با پایتون ایمیل هایی ارسال کنید که در آن فایل ضمیمه وجود دارد.
# استفاده از محتوای html برای استایل دهی ایمیل در پایتون
آخری موردی که در مورد ارسال ایمیل با پایتون نیاز است بدانید، نحوه ارسال ایمیل با محتوای html است. این روش برای ایمیل های تبلیغاتی یا خبرنامه مناسب است که در آن نیاز است قالب ایمیل را استایل دهی کنید. دقت کنید که در زمان ارسال ایمیل هایی با محتوای html بهتر است که متن ایمیل را به شکل متن ساده نیز داشته باشید. چون برخی افراد قابلیت html را در ایمیل غیرفعال میکنند.
به کد زیر دقت کنید:
msg.set_content('This is a plain text email!')
msg.add_alternative("""
<body>
<p><b> This is styled email! </b></p>
</body>
""", subtype='html')
در کد بالا، از تابع add_alternative برای ارسال ایمیلی با محتوای html استفاده کردیم. اگر قرار است محتوای ایمیل خود را استایل دهی کنید یا میخواهید هر گونه تصویر، لینک یا محتوای پاسخگو را اضافه کنید، HTML بسیار مفید است.
ارسال نظر