Последний файл в пакете mailtools содержит программный код самотестирования, представленный в примере 13.26. Он оформлен в виде отдельного файла, чтобы обеспечить возможность манипулирования путем поиска модулей — он имитирует работу клиента, который, как предполагается, имеет собственный модуль mailconfig.py в своем каталоге (каждый клиент может иметь собственную версию этого модуля).
Пример 13.26. PP4E\Internet\Email\mailtools\selftest.py
############################################################################ когда этот файл запускается как самостоятельный сценарий, выполняет тестирование пакета
############################################################################
#
# обычно используется модуль mailconfig, находящийся в каталоге клиента # или в пути sys.path; для нужд тестирования берется модуль
# из каталога Email уровнем выше
#
import sys
sys.path.append(‘..’)
import mailconfig
print(‘config:’, mailconfig.__file__)
# получить из __init__
from mailtools import (MailFetcherConsole, MailSender, MailSenderAuthConsole, MailParser)
if not mailconfig.smtpuser:
sender = MailSender(tracesize=5000) else:
sender = MailSenderAuthConsole(tracesize=5000)
sender.sendMessage(From = mailconfig.myaddress,
To = [mailconfig.myaddress],
Subj = ‘testing mailtools package’, extrahdrs = [(‘X-Mailer’, ‘mailtools’)], bodytext = ‘Here is my source code\n’, attaches = [‘selftest.py’], )
# bodytextEncoding=’utf-8′, # дополнительные тесты
# attachesEncodings=[‘latin-1’], # проверка текста заголовков # attaches=[‘monkeys.jpg’]) # проверка Base64
# to=’i18n adddr list…’, # тест заголовков mime/unicode
# измените параметр fetchlimit в модуле mailconfig,
# чтобы проверить ограничение на количество получаемых сообщений fetcher = MailFetcherConsole() def status(*args): print(args)
hdrs, sizes, loadedall = fetcher.downloadAllHeaders(status)
for num, hdr in enumerate(hdrs[:5]): print(hdr)
if input(‘load mail?’) in [‘y’, ‘Y’]:
print(fetcher.downloadMessage(num+1).rstrip(), ‘\n’, ‘-‘*70)
last5 = len(hdrs)-4
msgs, sizes, loadedall = fetcher.downloadAllMessages(status, loadfrom=last5) for msg in msgs:
print(msg[:200], ‘\n’, ‘-‘*70)
parser = MailParser()
for i in [0]: # попробуйте [0 , len(msgs)]
fulltext = msgs[i]
message = parser.parseMessage(fulltext)
ctype, maintext = parser.findMainText(message) print(‘Parsed:’, message[‘Subject’]) print(maintext)
input(‘Press Enter to exit’) # пауза на случай запуска # щелчком мыши в Windows
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011