ТЕМА 4: «PYTHON: отправка электронной почты с использованием SMTP»
Краткий курс лекции
Простой протокол передачи почты (SMTP) – это протокол, который обрабатывает отправку электронной почты и маршрутизацию электронной почты между почтовыми серверами.
Python предоставляет модуль smtplib, который определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой компьютер в Интернете с демоном слушателя SMTP или ESMTP.
Вот простой синтаксис для создания одного объекта SMTP, который впоследствии можно будет использовать для отправки электронной почты:
import smtplib
smtpObj = smtplib.SMTP([host [, port [, local_hostname]]])
Вот детали параметров –
· хост – это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.
· порт – если вы предоставляете аргумент хоста, вам нужно указать порт, который прослушивает SMTP-сервер. Обычно этот порт будет 25.
· local_hostname – если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost параметр.
хост – это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.
порт – если вы предоставляете аргумент хоста, вам нужно указать порт, который прослушивает SMTP-сервер. Обычно этот порт будет 25.
local_hostname – если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost параметр.
У объекта SMTP есть метод экземпляра, называемый sendmail, который обычно используется для отправки сообщения по почте. Требуется три параметра –
· Отправитель – строка с адресом отправителя.
· Получатели – список строк, по одной для каждого получателя.
· Сообщение – сообщение в виде строки, отформатированной так, как указано в различных RFC.
Отправитель – строка с адресом отправителя.
Получатели – список строк, по одной для каждого получателя.
Сообщение – сообщение в виде строки, отформатированной так, как указано в различных RFC.
Пример
Вот простой способ отправить одно электронное письмо, используя скрипт Python. Попробуйте один раз –
#!/usr/bin/python3
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"
Здесь вы разместили в сообщении основную электронную почту, используя тройную кавычку, стараясь правильно отформатировать заголовки. Для электронного письма требуются заголовок «От», «Кому» и «Тема», отделенные от тела письма пустой строкой.
Для отправки почты вы используете smtpObj для подключения к SMTP-серверу на локальной машине. Затем используйте метод sendmail вместе с сообщением, адресом отправителя и адресом назначения в качестве параметров (хотя адреса отправителя и получателя находятся внутри самой электронной почты, они не всегда используются для маршрутизации почты).
Если вы не используете SMTP-сервер на своем локальном компьютере, вы можете использовать клиент smtplib для связи с удаленным SMTP-сервером. Если вы не используете службу веб-почты (например, gmail или Yahoo! Mail), ваш поставщик электронной почты должен предоставить вам данные сервера исходящей почты, которые вы можете предоставить им, а именно:
mail = smtplib.SMTP('smtp.gmail.com', 587)
Отправка электронной почты в формате HTML с использованием Python
Когда вы отправляете текстовое сообщение с использованием Python, весь контент обрабатывается как простой текст. Даже если вы включите теги HTML в текстовое сообщение, оно будет отображаться как простой текст, и теги HTML не будут отформатированы в соответствии с синтаксисом HTML. Тем не менее, Python предоставляет возможность отправлять HTML-сообщение как фактическое HTML-сообщение.
При отправке сообщения электронной почты вы можете указать версию Mime, тип содержимого и набор символов для отправки электронной почты в формате HTML.
Пример
Ниже приведен пример отправки содержимого HTML в виде электронного письма. Попробуйте один раз –
#!/usr/bin/python3
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”), чтобы кодирование base 64 перед передачей.
Вопросы самоконтроля
· В какой кодировке работает почта Python
· Что такое ваш SMTP-сервер
· Как отправить электронную почту
Практическое задание
1. E-mail подготовка и отправка
· Подготовьте работающий пример
· Отправьте короткое письмо на свой электронный адрес
2. Коротко описать все действия, которые выполняет программа
Рекомендованная литература:
Интернет: CoderLesson.com Самоучитель Python