Использование сценария отправки почты без броузера

ispolzovanie scenariya otpravki pochty bez brouzera Сервер PyMailCGI

Вначале я написал сценарий отправки для применения только в PyMail- CGI с использованием значений, введенных в форме редактирования почты. Но, как мы видели, входные данные могут передаваться сценариям в полях формы или в параметрах запроса в адресе URL; так как сценарий отправки почты ищет входные данные во входных данных CGI, прежде чем импортировать их из модуля mailconfig, этот сценарий можно вызывать для отправки почты не только со страницы редактирования. Например, явно введя в броузере адрес URL такого вида (в одну строку без пробелов):

http://localhost:8000/cgibin/

onEditPageSend.py?site=smtp.rmi.net&

From=lutz@rmi.net&

To=lutz@rmi.net&

Subject=test+url&

text=Hello+Mark;this+is+Mark

мы отправим почтовое сообщение в соответствии с входными параметрами, указанными в конце URL. Конечно, такую строку URL долго вводить в поле адреса броузера, но ее можно автоматически генерировать в другом сценарии. Как мы видели в главах 13 и 15, с помощью модуля urllib.request можно передать такую строку URL на сервер из программы на языке Python. В примере 16.5 показан один из способов автоматизировать эту операцию.

Пример 16.5. PP4E\Internet\Web\PyMailCgi\sendurl.py

####################################################################

Отправляет почтовое сообщение, конструируя из входных данных

адрес URL следующего вида:

http://servername/pathname/

onEditPageSend.py?site=smtp.rmi.net&

From=lutz@rmi.net&

To=lutz@rmi.net&

Subject=test+url&

text=Hello+Mark;this+is+Mark

####################################################################

from urllib.request import urlopen

from urllib.parse import quote_plus

url = http://localhost:8000/cgi-bin/onEditPageSend.py’

url += ‘?site=%s’ % quote_plus(input(‘Site>’))

url += ‘&From=%s’ % quote_plus(input(‘From>’))

url += ‘&To=%s’ % quote_plus(input(‘To >’))

url += ‘&Subject=%s’ % quote_plus(input(‘Subj>’))

url += ‘&text=%s’ % quote_plus(input(‘text>’)) # или цикл ввода

print(‘Reply html:’)

print(urlopen(url).read().decode()) # страница подтверждения

# или с сообщением об ошибке

Запуская этот сценарий из командной строки, мы получаем еще один способ отправить электронное письмо — на этот раз путем обращения к нашему сценарию CGI на удаленном сервере, который должен выполнить всю работу. Сценарий sendurl.py выполняется на любой машине, где есть Python и сокеты, позволяет вводить параметры почты интерактивно и вызывает другой сценарий Python, находящийся на удаленной машине. Он выводит разметку HTML, возвращаемую нашим сценарием CGI:

C:\\PP4E\Internet\Web\PyMailCgi> sendurl.py

Site>smtpout.secureserver.net From>PP4E@learning-python.com To >lutz@learning-python.com Subj>testing sendurl.py

text>But sir, it’s only wafer-thin

Reply html:

<html><head><title>PyMailCGI: Confirmation page (PP4E)</title></head>

<body bgcolor="#FFFFFF"><h1>PyMailCGI Confirmation</h1><hr>

<h2>Send mail operation was successful</h2>

<p>Press the link below to return to the main page.</p>

</p><hr><a href="http://www.python.org">

<img src="../PythonPoweredSmall.gif"

align=left alt="[Python Logo]" border=0 hspace=15></a>

<a href="../pymailcgi.html">Back to root page</a>

</body></html>

Ответ в формате HTML, выведенный этим сценарием, предназначен для отображения в виде новой веб-страницы, когда его получает броузер. Такой замысловатый вывод нельзя назвать идеальным, но можно легко найти в нем строку ответа, чтобы определить результат (например, искать строку «successful» с помощью строкового метода find или оператора in проверки на вхождение), проанализировать состав с помощью стандартного модуля Python html.parse или re (описывается в главе 19) и так далее. Получившееся почтовое сообщение, которое мы для разнообразия просмотрим с помощью программы PyMailGUI из главы 14, появляется в моем почтовом ящике и показано на рис. 16.6 (это сообщение состоит из единственной текстовой части).

Конечно, есть другие, менее окольные способы отправки почты с компьютера клиента. Например, сам модуль Python smtplib (используется пакетом mailtools) зависит только от работоспособности клиента и возможности установить соединение с сервером SMTP, в то время как этот сценарий зависит также от работоспособности веб-сервера и сценария CGI (запросы проходят от клиента на веб-сервер, передаются сценарию CGI и далее серверу SMTP). Но поскольку наш сценарий CGI поддерживает работу с адресами URL, он способен на большее, чем тег HTML mailto:, и может вызываться с помощью модуля urllib.request вне контекста работающего веб-броузера. Например, с помощью сценариев типа sendurl.py можно вызывать и тес тиро вать программы, выполняемые на сервере.

Рис. 16.6. Результат выполнения сценария sendurl.py

 

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

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

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