До настоящего момента мы рассматривали базовые операции PyMailGUI в контексте простых текстовых сообщений. Мы также видели, что она может обрабатывать вложения в формате HTML, но мы еще не сталкивались со случаем, когда основной текст сообщения является разметкой HTML. В настоящее время использование формата HTML для представления основной части электронных писем стало обычным делом. Поскольку компонент редактора PyEdit, используемый программой PyMailGUI, опирается на виджет Text из библиотеки tkinter, ориентированный на простой текст, содержимое в формате HTML приходится обрабатывать особым образом:
• Для почтовых сообщений с альтернативной частью типа text/HTML PyMailGUI отображает в окне просмотра часть с простым текстом и добавляет кнопку, позволяющую по требованию открыть разметку HTML в веб-броузере.
• Для почтовых сообщений, содержащих только разметку HTML, в области отображения основного текста выводится простой текст, извлеченный из разметки HTML простым механизмом синтаксического анализа (не исходная разметка HTML), а сам текст в формате HTML автоматически открывается в веб-броузере.
Во всех случаях отображение интернациональных символов, присутствующих в разметке HTML, в веб-броузере зависит от информации о кодировках, имеющейся в тегах HTML, от механизма определения кодировки или от настроек пользователя. Корректно оформленные части в формате HTML уже содержат теги «<meta>» в разделах «<head>», определяющие имя кодировки, но они могут быть определены некорректно или вообще отсутствовать. Подробнее о поддержке интернационализации мы поговорим в следующем разделе.
На рис. 14.38 представлен случай просмотра альтернативной части типа text/HTML, а на рис. 14.39 показано, что происходит при просмотре сообщения, содержащего только текст в формате HTML. На рис. 14.38 веб-броузер был открыт щелчком на кнопке, соответствующей части в формате HTML, — этот случай ничем не отличается от примера с вложением в формате HTML, который мы видели выше.
Однако сообщения, содержащие только разметку HTML, обрабатываются в этой версии иначе: окно просмотра, на рис. 14.39 слева, отображает результат извлечения простого текста из разметки HTML, отображаемой в веб-броузере позади этого окна. Механизм синтаксического анализа HTML, используемый для этого, представляет собой первоначальный прототип, но даже те результаты, которые он способен воспроизвести, предпочтительнее, чем отображение исходной разметки HTML в окне просмотра. Для простейших почтовых сообщений в формате HTML, которые обычно отправляются отдельными лицами, а не компаниями, занимающимися массовыми рассылками рекламы (подобными той, что показана здесь), результаты при тестировании получаются в целом неплохие, хотя время покажет, как этот прототип будет чувствовать себя в суровых джунглях нестандартной разметки HTML — дальнейшее его улучшение весьма желательно.
Рис. 14.38. Просмотр сообщений с альтернативной частью типа text/HTML
Рис. 14.39. Просмотр сообщений, содержащих только разметку HTML
Одно замечание: программа PyMailGUI в настоящее время может отображать разметку HTML в веб-броузере и извлекать из нее простой текст, но она не может отображать разметку HTML непосредственно в своем собственном окне и не поддерживает ее редактирование. Данная функциональность относится к разряду расширений, ожидающих, когда свое внимание им уделят другие программисты, которые посчитают это полезным.
Поддержка интернационализации содержимого
Наша следующая особенность является следствием неизбежного успеха Интернета. Как описывалось выше, в разделе, где перечислялись нововведения в версии 3.0, программа PyMailGUI полностью поддерживает интернациональные наборы символов в почтовых сообщениях — текстовое содержимое и заголовки декодируются перед отображением и кодируются перед отправкой в соответствии со стандартами электронной почты, MIME и Юникода. Это, пожалуй, самое заметное новшество в данной версии программы. К сожалению, это сложно отразить на снимках с экрана, но вы можете получить более полное представление об этой особенности, открыв следующий файл с сохраненными почтовыми сообщениями, включенный в состав примеров, и просмотрев сообщения из него в форматированном и в исходном виде, попробовав создавать на их основе ответы или пересылаемые сообщения, и так далее:
C:\…\PP4E\Internet\Email\PyMailGui\SavedMail\i18n-4E
![]() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
006 | СопЬафа nala uma novidada I US* — Personal! •007 I КННЖ278» ЧЯНТ X I
000 | Ra; оптмимвация движения I PPiKOlaarninq F 009 I Ko; oimootaauKM движении | EP4K9learning*f
010 I rwd: 2И)Я*»хЛй»Н-»|Т WUflrjfeM I
Для демонстрации особенностей этой поддержки на рис. 14.40 показана ситуация, когда данный файл был открыт для разнообразия с одной из альтернативных настроек учетной записи, описываемых в следующем разделе. На этом снимке изображено окно со списком сообщений и окна просмотра с сообщениями на русском и китайском языках, отправленными на мой почтовый адрес (эти письма рекламного характера не имеют какого-то особого значения, но вполне пригодны для тестирования). Обратите внимание, что и заголовки сообщений, и их содержимое было корректно декодировано для отображения как в окне со списком, так и в окнах просмотра сообщений.
На рис. 14.41 показаны фрагменты исходного текста двух сообщений, полученные двойным щелчком на соответствующих им элементах списка (вы можете просмотреть эти сообщения, открыв указанный выше файл, если не сможете разглядеть какие-то детали на снимке в книге). Обратите внимание, что тело обоих сообщений представлено в кодированном виде в соответствии с требованиями стандартов MIME и Юникода — заголовки вверху и текст внизу в этих окнах представлен в виде строк в формате Base64 и quoted-printable, которые необходимо декодировать, чтобы получить форматированный результат, изображенный на рис. 14.40.
Информация в заголовках текстовых частей описывает схемы кодирования их содержимого. Например, значение charset="gb2312" в заголовке «Content-type» идентифицирует набор символов Юникода китайского языка, а заголовок «Content-Transfer-Encoding» определяет формат MIME (например, base64).