Latest web development tutorials

بيثون SMTP لإرسال البريد

SMTP (بروتوكول نقل البريد البسيط) الذي هو بروتوكول نقل البريد البسيط، الذي هو عبارة عن مجموعة من القواعد لنقل الرسائل من المصدر إلى الوجهة، والتي لديها للسيطرة على طريق رسائل العبور.

يوفر smtplib الثعبان في وسيلة مريحة جدا لإرسال البريد الإلكتروني. ومن بروتوكول SMTP لمجموعة بسيطة.

بيثون خلق تركيب الكائن SMTP كما يلي:

import smtplib

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

المعلمة الوصف:

  • استضافة: استضافة خادم SMTP. يمكنك تحديد عنوان بروتوكول الإنترنت المضيف أو اسم المجال مثل: w3cschool.cc، وهذا هو مقياس اختياري.
  • المنفذ: إذا قمت بتوفير معلمة المضيف، تحتاج إلى تحديد رقم المنفذ المستخدمة من قبل خدمة SMTP، في ظل الظروف العادية رقم المنفذ SMTP هو 25.
  • local_hostname: إذا SMTP الخاص بك على هذا الجهاز، تحتاج فقط لتحديد عنوان خادم للالمضيف المحلي.

كائن SMTP الثعبان باستخدام طريقة الى sendmail من إرسال البريد الإلكتروني مع بناء الجملة التالي:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

المعلمة الوصف:

  • from_addr: عنوان البريد الإلكتروني المرسل ل.
  • to_addrs: قائمة سلسلة، وإرسال البريد الإلكتروني.
  • جي اس: إرسال رسالة

هنا يجب أن نشير إلى أن الحجة الثالثة، جي اس هو السلسلة التي تمثل الإلكتروني. ونحن نعلم أن رسالة يتكون عموما من رأس، المرسل والمتلقي، محتوى الرسالة، والملحقات، وما إلى ذلك، وإرسال البريد الإلكتروني، وإيلاء الاهتمام إلى تنسيق جي اس. هذا الشكل هو شكل تعريف بروتوكول SMTP.

أمثلة

ما يلي هو رسالة يتم إرسالها باستخدام بيثون مثال بسيط:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

نحن نستخدم ثلاثة عروض أسعار لإنشاء رسائل البريد الإلكتروني، ومعيار البريد الإلكتروني يتطلب ثلاثةرؤوس:من، إلى،والموضوع،كل المعلومات مباشرة مع انقسام صف فارغ.

ونحن على اتصال عن طريق instantiating وصول وحدة smtplib SMTP بروتوكول نقل البريد الإلكتروني الأجسامsmtpObjل، وإرسال الرسالة باستخدام طريقةالى sendmail.

تنفيذ الإجراء أعلاه، إذا قمت بتثبيت هذه الوحدة تنسخ، فإنه سيتم إخراج:

$ python test.py 
邮件发送成功

عرض البريد الوارد لدينا (عادة في سلة المهملات)، يمكنك عرض رسالة البريد الإلكتروني:

إذا لم يكن لديك الوصول الأصلي لتنسخ، يمكنك أيضا استخدام موفري خدمة البريد الأخرى الوصول SMTP (QQ، نيتياس، وجوجل، الخ).

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服务
mail_host="smtp.XXX.com"  #设置服务器
mail_user="XXXX"    #用户名
mail_pass="XXXXXX"   #口令 


sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.login(mail_user,mail_pass)  
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

باستخدام بيثون أرسلت رسائل بتنسيق HTML

باستثناء الرسائل المرسلة بيثون ويتم إرسال رسالة بريد إلكتروني بتنسيق HTML كما _subtype تعيين نص عادي في MIMEText إلى HTML. رمز معين على النحو التالي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.w3big.com">这是一个链接</a></p>
"""
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

تنفيذ الإجراء أعلاه، إذا قمت بتثبيت هذه الوحدة تنسخ، فإنه سيتم إخراج:

$ python test.py 
邮件发送成功

عرض البريد الوارد لدينا (عادة في سلة المهملات)، يمكنك عرض رسالة البريد الإلكتروني:


بيثون إرسال البريد مع المرفقات

إرسال رسائل مع المرفقات، عليك أولا إنشاء MIMEMultipart () مثلا، المرفق ثم شيدت، إذا كان هناك المرفقات متعددة يمكن بناؤها على التوالي. وأخيرا smtplib.smtp إرسالها.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

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

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

#邮件正文内容
message.attach(MIMEText('这是本教程Python 邮件发送测试……', 'plain', 'utf-8'))

# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)

# 构造附件2,传送当前目录下的 w3big.txt 文件
att2 = MIMEText(open('w3big.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="w3big.txt"'
message.attach(att2)

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"
$ python test.py 
邮件发送成功

عرض البريد الوارد لدينا (عادة في سلة المهملات)، يمكنك عرض رسالة البريد الإلكتروني:


إضافة صورة في النص HTML

رسالة نصية HTML في مقدمي خدمة البريد العام لإضافة خارج سلسلة غير صالحة، وترد الحق لإضافة اختراق أدناه:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("本教程", 'utf-8')
msgRoot['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
msgRoot['Subject'] = Header(subject, 'utf-8')

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.w3big.com">本教程链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

# 指定图片为当前目录
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, msgRoot.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"
$ python test.py 
邮件发送成功

عرض البريد الوارد لدينا (إذا كان في سلة المهملات قد تحتاج إلى نقل إلى علبة الوارد قبل العرض العادي)، يمكنك عرض رسالة البريد الإلكتروني:

لمزيد من المعلومات، يرجى الرجوع إلى: https://docs.python.org/2/library/email-examples.html .