ارسال ایمیل در پایتون با پروتکل SMTP – بخش سوم

  • دوشنبه ۲۲ آبان, ۱۳۹۶
  • ۳۵۰۸ بازدید
ارسال ایمیل در پایتون با پروتکل SMTP – بخش سوم
4.5 (90%) 2 votes

Simple Mail Transfer Protocol یا کوتاه شده آن SMTP پروتکلی برای ارسال ایمیل و هدایت ایمیل ها در بین سرور های ایمیل است. پایتون ماژولی به نام smtplib را داراست که یک شی نشست (Session) کلاینتی SMTP می سازد که از این نشست می توان برای ارسال ایمیل به هر ماشین داخل شبکه اینترنت با استفاده از شنونده SMTP یا ESMTP استفاده کرد. در این نوشته آموزشی به روش ارسال ایمیل در پایتون می پردازیم که درون مایه این آموزش معرفی Syntax ساخت یک شی SMTP در زبان برنامه نویسی پایتون است و یک نمونه کد نیز به منظور ارسال ایمیل نشان خواهیم داد.

در نوشته پشین از این سری آموزش به مفاهیم پایه برنامه نویسی شبکه با پایتون پرداختیم.

آموزش ارسال ایمیل در پایتون

کد زیر را در نظر بگیرید.

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

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

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

  • host – این پارامتر نام میزبان در حال جرا در سرور SMTP شماست. ی توانید یک آدرس آی پی مشخص کنید یا نام دامنه وبسایت خود را مانند Cupcode.ir وارد کنید. این پارامتر دلخواه است.
  • port – اگر پارامتر host را مشخص کردید، بنابراین می بایست مقدار port را نیز مشخص کنید، این همان پرتی است که سرور SMTP شما بر روی آن گوش به زنگ یا Listening است. معمولا این پرت عدد 25 است.
  • local_hostname – اگر سرور SMTP شما روی ماشین محلی خود شما در حال اجراست، یعنی سیستمی که برنامه پایتون و سرور ایمیل شما روی آن اجرا می شود یکی است، می توانید برای این گزینه همان localhost را وارد کنید.

یک شی SMTP متدی به نام sendmail دارد که برای ارسال یک پیام به کار می رود و سه پارامتر دریافت می کند.

  •  نام فرستنده – یک رشته که آدرس فرستنده است
  • دریافت کننده – یک فهرستی از رشته ها که هر کدام از این رشته ها، آدرس یک دریافت کننده را مشخص می کند. (برای مشخص کردن سه دریافت کننده برای ایمیل 3 رشته معرفی می کنیم)
  • پیام – یک پیام از نوع رشته

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

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

#!/usr/bin/python

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print (Successfully sent email)
except SMTPException:
   print (Error: unable to send email)

در تکه کد بالا، یک ایمیل ساده را در حد یک پیام متنی آماده کرده ایم. با استفاده از سه بار تکرار علامت نقل قول مطمئن شدیم که سربرگ به خوبی فرمت شود. هر ایمیل نیازمند یک پارامتر From، To و سربرگ Subject است که هر کدام به ترتیب دریافت کننده، فرستنده و موضوع ایمیل می باشد. توجه داشته باشید که این سه مورد با استفاده از یک خط خالی از متن اصلی ایمیل جدا شده اند.

برای فرستادن ایمیل از smtpObj برای اتصال به سرور SMTP روی ماشین محلی (می تواند سیستم شخصی شما برای آزمایش کردن باشد) و سپس از متد sendmail در کنار رشته متنی پیام و موارد دیگر به عنوان پارامتر های این متد استفاده می کنیم. (اگر چه در رشته پیام ما دریافت کننده و فرستنده را مشخص کردیم ولی ممکن است از این مقادیر برای هدایت ایمیل استفاده نشود)

اگر روی ماشین محلی خود سرور SMTP ندارید، می توانید از کلاینت smtplib برای برقراری ارتباط از راه دور به یک سرور SMTP استفاده کنید. اگر می خواهید از یک سرویس دهنده ایمیل جداگانه ای مانند Hotmail, Yahoo یا… استفاده کنید می بایست این سرویس دهنده مشخصات مربوط به سرور ایمیل خروجی را در اختیار شما قرار داده باشد. البته سرویسی مانند جیمیل یک سری تنظیمات افزوده دیگری برای استفاده نیاز دارد.

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

smtplib.SMTP('mail.your-domain.com', 25)

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

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

هنگامی که میی خواهید ایمیلی ارسال کنید، سه پارامتر برای Mime Version، Content Type و Character Set را می توانید برای ایمیل خود تنظیم کنید.

نمونه کد زیر یک ایمیل به فرم HTML است که در زبان پایتون نوشته شده است.

#!/usr/bin/python

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print (Successfully sent email)
except SMTPException:
   print (Error: unable to send email)

در کد بالا مشخص است که سه پارامتر گفته شده را چگونه در متن پیام معرفی کرده ایم.

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

برای این که بتوانید امیلی به همراه یک فایل پیوست شده بفرستید، می بایست پارامتر Content-type معرفی شده در نمونه پیشین را روی مقدار multipart/mixed تنظیم کنید. در این صورت متن ایمیل و پیوست مورد نظر شما با فواصلی از هم می توانند معرفی شوند.

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

فایل های پیوست می بایست با استفاده از تابع pack("m") انکود شوند تا پیش از انتقال انکودینگ base64 داشته باشند.

نمونه ای از کد زبان پایتون که یک اییمیل به همراه یک فایل پیوست فرستاده می شود. فایلی که قرار است پیوست شود در مسیر /tmp/test.txt وجود دارد.

#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/test.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64

sender = 'webmaster@cupcode.ir'
reciever = 'amrood.admin@gmail.com'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
 smtpObj = smtplib.SMTP('localhost')
 smtpObj.sendmail(sender, reciever, message)
 print "Successfully sent email"
except Exception:
 print "Error: unable to send email"

امیدواریم این آموزش از سری آموزش های برنامه نویسی شبکه به زبان پایتون برای شما کاربردی بوده باشد. شما می توانید پرسش های خود را از فرم فرستادن دیدگاه در میان بگذارید 🙂

ارسال ایمیل در پایتون با پروتکل SMTP – بخش سوم
4.5 (90%) 2 votes
برای دریافت تازه‌ترین ها به کانال تلگرامی کدفنجونی بپیوندید : cupcode_ir@

دیدگاه خود را در میان بگذارید

@

اگر ربات نیستید به پرسش پاسخ دهید! * Time limit is exhausted. Please reload the CAPTCHA.