Отправка почты из интерактивной оболочки

otpravka pochty iz interaktivnoj obolochki Сценарии на стороне клиента

Итак, где мы сейчас находимся в абстрактной модели Интернета? Со всеми этими приемами получения и отправки почты легко за деревьями не увидеть леса. Имейте в виду, что почта передается через сокеты (еще помните о них?), поэтому они являются фундаментом всего происходящего. Всякое полученное или отправленное письмо в конечном итоге состоит из форматированных последовательностей байтов, передаваемых по сети между компьютерами через сокеты. Однако, как мы уже видели, интерфейсы Python к протоколам POP и SMTP скрывают все мелкие детали. Кроме того, сценарии, которые мы начали писать, скрывают даже интерфейсы Python и предоставляют высокоуровневые интерактивные инструменты.

Оба сценария, popmail и smtpmail, предоставляют переносимые инструменты электронной почты, но удобство их использования не соответствует уровню, принятому в нынешние времена. Далее в этой главе с помощью увиденного мы реализуем более интерактивный инструмент для работы с электронной почтой. В следующей главе мы также создадим графический интерфейс к электронной почте с использованием tkinter, а в другой главе построим веб-интерфейс. Все эти инструменты отличаются, главным образом, только интерфейсом пользователя. Каждый из них, в конечном счете, применяет рассмотренные нами почтовые модули для передачи почтовых сообщений через Интернет посредством сокетов.

Прежде чем двинуться дальше, еще одно примечание, касающееся протокола SMTP: мы можем использовать интерактивную оболочку Python не только для чтения, но и для отправки почты, вызывая соответствующие функции и методы вручную. Ниже, например, демонстрируется отправка сообщения через SMTP-сервер моего интернет-провайдера по двум адресам, которые, как предполагаются, включены в список рассылки:

C:\\PP4E\Internet\Email> python

>>> from smtplib import SMTP

>>> conn = SMTP(‘smtpout.secureserver.net’)

>>> conn.sendmail(

PP4E@learningpython.com‘, # истинный отправитель

[‘lutz@rmi.net‘, ‘PP4E@learningpython.com‘], # истинные получатели … """From: PP4E@learning-python.com

To: maillist

Subject: test interactive smtplib

testing 1 2 3…

""") {}

>>> conn.quit() # вызов quit() необходим,

# дата добавляется автоматически

(221, bClosing connection. Good bye.’)

Мы проверим доставку этого сообщения с помощью программы почтового клиента, которую напишем далее. В поле «To» почтовые клиенты получателя будут отображать адрес «maillist» — результат вполне допустимого приема манипулирования заголовком. Фактически того же эффекта можно добиться при использовании сценария smtpmail-noTo, введя в ответ на запрос «To?» список адресов, разделенных точкой с запятой (например, lutz@rmi.net; PP4E@learning-python.com), и указав название списка рассылки в строке заголовка «To:». Почтовые клиенты, поддерживающие списки рассылки, автоматизируют этот шаг.

Однако отправка таким способом электронных писем из интерактивной оболочки может оказаться непростым делом — формат представления строк заголовков регулируются стандартами: например, пустая строка после строки заголовка с темой сообщения является обязательной и играет важную роль, а заголовок «Date» может вообще отсутствовать (он будет добавлен автоматически). Кроме того, при наличии вложений форматирование сообщений становится намного более сложным. На практике для создания сообщений электронной почты часто используется пакет email из стандартной библиотеки, после чего они передаются модулю smtplib. Пакет позволяет конструировать электронные письма, присваивая заголовки и присоединяя части, возможно кодированные, и создает корректно отформатированный текст письма. Чтобы узнать, как это делается, перейдем к следующему разделу.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий