Как и оригинал, эта программа используется в интерактивном режиме. Вывод этой версии почти идентичен выводу оригинальной версии, поэтому не будем углубляться в его описание. Ниже приводится листинг сеанса работы со сценарием. Запустите его на своем компьютере, чтобы получить информацию из первых рук:
C:\…\PP4E\Internet\Email> pymail2.py
user: PP4E@learning-python.com
loading headers
Connecting…
Password for PP4E@learning-python.com on pop.secureserver.net?
b’+OK <24460.1273347818@pop15.prod.mesa1.secureserver.net>’
1 of 7
2 of 7
3 of 7
4 of 7
5 of 7
6 of 7
7 of 7
load headers exit
[Pymail email client]
1: 1860 bytes
From =>lutz@rmi.net
Date =>Wed, 5 May 2010 11:29:36 -0400 (EDT)
Subject =>I’m a Lumberjack, and I’m Okay
2: 1408 bytes
From =>lutz@learning-python.com
Date =>Wed, 05 May 2010 08:33:47 -0700
Subject =>testing
3: 1049 bytes
From =>Eric.the.Half.a.Bee@yahoo.com
Date =>Thu, 06 May 2010 14:11:07 -0000
Subject =>A B C D E F G
4: 1038 bytes
From =>Eric.the.Half.a.Bee@aol.com
To =>nobody.in.particular@marketing.com
Date =>Thu, 06 May 2010 14:32:32 -0000
Subject =>a b c d e f g
5: 957 bytes
From =>PP4E@learning-python.com
To =>maillist
Date =>Thu, 06 May 2010 10:58:40 -0400
Subject =>test interactive smtplib
[Press Enter key]
6: 1037 bytes
From =>Cardinal@hotmail.com
Date =>Fri, 07 May 2010 20:32:38 -0000
Subject =>Among our weapons are these
7: 3248 bytes
From =>PP4E@learning-python.com
Date =>Sat, 08 May 2010 19:26:22 -0000
Subject =>testing mailtools package
[Pymail] Action? (i, l, d, s, m, q, ?) l 7 load 7
Connecting…
b’+OK <20110.1273347827@pop07.prod.mesa1.secureserver.net>’
Here is my source code
[Pymail] Action? (i, l, d, s, m, q, ?) d 7
[Pymail] Action? (i, l, d, s, m, q, ?) m
From? lutz@rmi.net
Subj? test pymail2 send
Type message text, end with line="."
Run away! Run away!
.
Sending to…[‘PP4E@learning-python.com’] From: lutz@rmi.net
Subject: test pymail2 send
Date: Sat, 08 May 2010 19:44:25 -0000
Run away! Run away!
Send exit
[Pymail] Action? (i, l, d, s, m, q, ?) q
To be deleted: [7]
Delete?y
Deleting messages from server…
deleting mails
Connecting…
b’+OK <11553.1273347873@pop17.prod.mesa1.secureserver.net>’
В почтовом ящике теперь имеются сообщения, отправленные с помощью самых разных клиентов, таких как веб-клиенты интернет-провайдеров, простой сценарий SMTP, интерактивный сеанс Python, сценарий самотестирования из пакета mailtools и два клиента командной строки. В последующих главах мы еще больше расширим этот список. Все электронные письма, отправленные с их помощью, выглядят для нашего сценария совершенно одинаковыми. Ниже выполняется получение письма, которое только что было отправлено (вторая попытка получить письмо обнаружит, что оно уже в кэше):
C:\…\PP4E\Internet\Email> pymail2.py
user: PP4E@learning-python.com
loading headers
Connecting…
…часть строк опущена…
[Press Enter key]
6: 1037 bytes
From =>Cardinal@hotmail.com
Date =>Fri, 07 May 2010 20:32:38 -0000
Subject =>Among our weapons are these
7: 984 bytes
From =>lutz@rmi.net
Date =>Sat, 08 May 2010 19:44:25 -0000
Subject =>test pymail2 send
[Pymail] Action? (i, l, d, s, m, q, ?) l 7
load 7
Connecting…
b’+OK <31456.1273348189@p3pop01-03.prod.phx3.gdg>’
Run away! Run away!
[Pymail] Action? (i, l, d, s, m, q, ?) l 7
Run away! Run away!
[Pymail] Action? (i, l, d, s, m, q, ?) q
Изучите программный код сценария pymail2, чтобы глубже проникнуть в его суть. Вы увидите, что в этой версии исчезли некоторые сложности, такие как ручное форматирование текста электронного письма. Кроме того, она иначе выводит текст письма — вместо того чтобы вслепую выводить полный текст сообщения (вместе со всеми вложениями), она с помощью mailtools извлекает и выводит первую текстовую часть сообщения. Использованные здесь сообщения слишком просты, чтобы увидеть разницу, но при чтении писем с вложениями новая версия более избирательна к тому, что следует отобразить.
Кроме того, так как интерфейс к электронной почте инкапсулирован в модули пакета mailtools, при необходимости что-то изменить в нем достаточно будет внести изменения только в конкретный модуль независимо от того, как много клиентов электронной почты используют эти инструменты. А поскольку программный код пакета mailtools используется совместно, то если известно, что он работает в одном клиенте, можно быть уверенными, что он будет работать и в другом — отпадает необходимость отлаживать новый программный код.
С другой стороны, сценарий pymail2 на самом деле не использует всю мощь ни пакета mailtools, ни лежащего в его основе пакета email. Например, сценарий вообще никак не обрабатывает вложения и интернационализированные заголовки, не поддерживает синхронизацию почтового ящика входящих сообщений, и иногда декодированный текст основной части, подготовленный к выводу, может содержать символы, несовместимые с терминалом. Чтобы увидеть возможности пакета email в полном объеме, необходимо исследовать более крупную систему электронной почты, такую как PyMailGUI или PyMailCGI. Первая из них является темой следующей главы, а со второй мы познакомимся в главе 16. Однако перед этим коротко рассмотрим еще несколько дополнительных инструментов для работы с клиентскими протоколами.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011