от мая 2010 г. (версия 2.1 от января 2006 г.)
Программирование на Python, 4-е издание
Марк Лутц
PyMailGUI - это многооконная программа для обработки электронной почты в автономном и подключенном режимах. Ее интерфейсы включают одно окно со списком сообщений на почтовом сервере, ноль или большее количество окон со списком сообщений из файлов сохранения и несколько окон просмотра для составления или отображения почтовых сообщений, выбранных в окне со списком. При запуске первым появляется главное окно со списком сообщений на сервере, но попытка подключения к почтовому серверу не предпринимается до тех пор, пока не будет получен запрос на загрузку или отправку сообщений. Размеры всех окон в PyMailGUI можно изменять, что особенно удобно в окнах со списками, т.к. позволяет видеть дополнительные колонки.
Примечание. Чтобы использовать PyMailGUI для чтения и составления собственных сообщений электронной почты, потребуется надлежащим образом изменить имена серверов POP и SMTP, а также данные учетной записи в файле mailconfig.py, который находится в каталоге с исходным кодом программы PyMailGUI. Соответствующие детали приведены в разделе 11.
Ниже перечислены крупные расширения в последней версии.
Щелкайте на кнопках в окне со списком, чтобы обрабатывать почтовые сообщения:
Дважды щелкните на заголовке почтового сообщения в окне со списком, чтобы просмотреть необработанный текст сообщения, включая любые почтовые заголовки, которые не отображаются посредством кнопки "Просмотреть". Окна со списками, открытые для файлов сохраненных сообщений, поддерживают все перечисленные выше кнопки кроме "Загрузить". После первоначальной загрузки щелчок на кнопке "Загрузить" приводит к извлечению только заголовков вновь поступивших сообщений. Чтобы принудительно перезагрузить все почтовые сообщения из сервера, перезапустите PyMailGUI. Кнопка для перезагрузки не предусмотрена, т.к. полная перезагрузка требуется только при возникновении редких ошибок, связанных с удалением и синхронизацией с почтовым ящиком на сервере, а в таких ситуациях перезагрузка инициируется автоматически.
Щелкните на заголовке почтового сообщения в главном окне со списком, чтобы выбрать его.
Отметьте флажок "Все", чтобы выбрать все сообщения или отменить их выбор. Одновременно
можно выбирать несколько сообщений: кнопки "Просмотреть", "Удалить", "Ответить", "Переслать"
и "Сохранить" применяются ко всем выбранным в текущий момент почтовым сообщениям, как в окне
со списком для сервера, так и в окне со списком для файла сохраненных сообщений. Щелкайте,
удерживая нажатой клавишу
В версии 2.1 большинство действий в окне со списком сервера автоматически запускают быструю
проверку для обнаружения ошибок синхронизации с почтовым ящиком входящих сообщений на сервере.
Если появляется всплывающее окно с указанием на ошибку синхронизации, тогда автоматически
запускается полная перезагрузка индекса сообщений; нет необходимости останавливать
и перезапускать PyMailGUI.
Кнопки действий в окнах просмотра сообщений ("Просмотреть"):
Кнопки действий в окнах составления сообщений ("Написать", "Ответить", "Переслать"):
Кнопки "Части" и "Разделить" отображаются во всех окнах просмотра; для простых сообщений
единственной частью является тело сообщения. Запросы на ответ, пересылку и удаление
сообщений выполняются в окнах со списками, а не в окнах просмотра сообщений. Операции
удаления не приводят к закрытию открытых окон просмотра.
Новое в версии 2.1: окна просмотра также имеют фиксированное максимальное количество
кнопок быстрого доступа для вложенных частей сообщения. Они являются альтернативой
кнопки "Разделить". После достижения максимального количества добавляется кнопка "...",
которая просто запускает действие, инициируемое кнопкой "Разделить". Максимальное
количество кнопок частей для отображения в окне просмотра можно установить в модуле
пользовательских настроек mailconfig.py.
Для обработки сообщений электронной почты в автономном режиме: загрузите сообщения
из сервера с помощью кнопки "Загрузить", сохраните их в локальном файле с помощью
кнопки "Сохранить" и щелкните на кнопке "Открыть", чтобы открыть окно со списком
файла сохраненных сообщений либо в окне со списком сервера, либо в окне со списком
другого сохраненного файла. Щелчок на кнопке "Открыть" приводит к отображению нового
окна со списком для файла или к перемещению наверх его окна, если файл уже был открыт.
Окно со списком файла сохраненных сообщений позволяет выполнять все перечисленные выше
действия главного окна за исключением "Загрузить". Например, сохраненные сообщения можно
просматривать, удалять, отвечать на них или пересылать из окна со списком файла. Операции
сопоставляются с локальным файлом сохраненных сообщений, а не с почтовым ящиком входящих
сообщений на сервере. Чтобы переместить почтовое сообщение из одного файла сохраненных
сообщений в другой, необходимо сохранить его в новом файле, после чего удалить в окне
исходного файла.
Для обработки файлов сохраненных сообщений в автономном режиме подключаться к серверу
не нужно: просто щелкните на кнопке "Открыть" в главном окне со списком. В окне со списком
файла сохраненных сообщений щелчок на кнопке "Завершить" приводит к закрытию только этого
окна; щелчок на кнопке "Удалить" вызывает удаление сообщения из локального файла сохраненных
сообщений, а не из сервера. Окна со списками файлов сохраненных сообщений автоматически
обновляются, когда новые сообщения сохраняются в соответствующем файле где угодно в графическом
пользовательском интерфейсе. Файл отправленных сообщений тоже можно открыть и обработать как
обычный файл сохраненных сообщений, щелкнув на кнопке "Открыть".
Обратите внимание, что кнопки "Сохранить" в окнах со списками обеспечивают сохранение полного
текста сообщения (включая его заголовки и разделитель сообщений). Чтобы сохранить только главную
текстовую часть просматриваемого или составляемого сообщения, щелкните на кнопке "Сохранить"
в компоненте текстового редактора в нижней части окна просмотра или редактирования либо щелкните
на кнопке действия "Разделить" в окне просмотра. Сохранение в компоненте текстового редактора
может быть полезным для сохранения черновика составляемого сообщения во временном файле; позже
его при необходимости можно будет вставить в окно составления сообщения. Сохранение вложений
описано в следующем разделе.
Новое в версии 2.1: запросы на открытие и удаление в локальных файлах сохраненных сообщений
выполняются в отдельном потоке во избежание блокировки графического пользовательского интерфейса
во время загрузки и удаления крупных файлов. Из-за этого индекс загруженного файла может
не появиться в его окне со списком немедленно. Аналогично при сохранении новых сообщений или
отправке сообщений может возникнуть задержка перед обновлением окна со списком соответствующего
локального файла, если оно в данный момент открыто.
В качестве индикации состояния заголовок окна меняется на "Загрузка..." при загрузке и на "Удаление..."
при удалении, и сбрасывается в имя файла после выхода из потока (окно сервера использует всплывающие
окна для индикации состояния, поскольку задержка больше, и есть информация о ходе работ для отображения).
В конечном итоге либо появится индекс и его окно будет поднято, либо появится сообщение об ошибке.
Операции загрузки и удаления в файлах сохраненных сообщений не могут перекрывать друг друга для данного
файла, но могут перекрываться с операциями передачи из сервера и операциями с другими открытыми файлами.
Примечание: операции сохранения файла все еще не потоковые и могут на мгновение приостанавливать работу
графического пользовательского интерфейса при сохранении очень большого количества почтовых сообщений.
Обычно это незаметно, поскольку в отличие от операций открытия и удаления операции сохранения просто
дописывают в файл сохраненных сообщений и не перезагружают его содержимое. Однако чтобы полностью избежать
пауз, не сохраняйте слишком много больших сообщений за одну операцию.
Также обратите внимание: текущая реализация загружает весь файл сохраненных сообщений в память при открытии.
Из-за этого файлы сохраненных сообщений ограничены по размеру в зависимости от вашего компьютера. Во избежание
расхода слишком большого объема памяти, необходимо стараться, чтобы файлы сохраненных сообщений были относительно
небольшими (по крайней мере, меньше доступной памяти компьютера). Как правило, имеет смысл организовывать
сохраненные почтовые сообщения по категориям в многочисленных маленьких файлах, а не в нескольких крупных.
Окна просмотра PyMailGUI отображают текстовую информацию. При просмотре почтового сообщения в окне
просмотра отображается его основной текст, который извлекается из полного тела простого сообщения
либо из первой текстовой части составного сообщения MIME. Чтобы извлечь основной текст сообщения,
PyMailGUI ищет простой текст, далее HTML-разметку, а затем текст любого другого типа. Если такое
текстовое содержимое не найдено, тогда в окне просмотра ничего не отображается, но части можно
открыть вручную с помощью кнопки "Разделить" (и кнопок быстрого доступа к частям в версии 2.1,
как описано ниже).
Если тело простого сообщения имеет тип HTML или часть HTML используется в качестве основного текста
сообщения, то для основного текста сообщения в качестве альтернативного отображения всплывает окно
веб-браузера, если это разрешено пользователем (модуль mailconfig может применяться для обхода
проверки; см. далее). Это эквивалентно открытию части HTML щелчком на кнопке "Разделить", но инициируется
автоматически для HTML-разметки основного текста сообщения. Если простое сообщение представляет собой
что-то, отличающееся от текста или HTML-разметки, тогда его содержимое потребуется открыть вручную
посредством кнопки "Разделить".
При просмотре сообщения с многокомпонентными вложениями помечаются префиксом "*" в окнах со списками.
Кнопки "Части" и "Разделить" появляются во всех окнах просмотра. Части сообщения определяются следующим образом:
В обоих случаях части сообщения можно сохранить и открыть, щелкнув на кнопке "Разделить". Для простых
сообщений тело сообщения можно сохранить с помощью кнопки "Разделить", а также кнопки "Сохранить"
в текстовом редакторе окна просмотра. Для обработки составных сообщений:
Щелкните на кнопке "Разделить" и выберите локальный каталог для сохранения частей. После сохранения
текстовые части открываются в графическом интерфейсе TextEditor, типы HTML и мультимедиа открываются
в веб-браузере, а общие типы документов Windows (например, файлы .doc и .xls) открываются через запись
для расширения имени файла в реестре Windows. В целях безопасности неизвестные типы и исполняемые части
программ никогда не запускаются автоматически; даже программы Python отображаются только как исходный текст
(сохраните код для запуска вручную).
Веб-браузеры на некоторых платформах могут открывать типы мультимедиа (изображение, аудио, видео)
в определенных программах обработки содержимого (например, проигрыватель или средство просмотра изображений).
Другие типы вложений никогда не открываются, а вложения никогда не открываются без разрешения пользователя
(или авторизации mailconfig.py в версии 2.1). Просмотрите каталог с сохраненными частями, чтобы открыть
другие части вручную.
Во избежание прокрутки очень длинных строчек (временами отправляемых почтовыми программами на основе HTML)
основная текстовая часть сообщения автоматически переносится для удобства просмотра. Длинные строки разбиваются
по первому разделителю, найденному перед фиксированной колонкой, при просмотре, ответе или пересылке. Колонку
переноса можно сконфигурировать или отключить в модуле mailconfig (см. далее). Текстовые строки никогда не
переносятся автоматически при отправке; пользователи или получатели должны управлять длиной строки
в составленных сообщениях.
Новое в версии 2.1: окна просмотра также имеют фиксированное максимальное количество кнопок быстрого доступа
для вложенных частей сообщения. Они являются альтернативой действию кнопки "Разделить": щелчок на кнопке
быстрого доступа к вложению приводит к автоматическому извлечению, сохранению и открытию этого единственного
вложения напрямую, без каталога для разделяемых частей и всплывающих диалоговых окон (используется временный
каталог). Максимальное количество кнопок частей для отображения в окне просмотра можно указать в модуле
пользовательских настроек mailconfig.py. Для сообщений с количеством вложений, превышающим максимальное,
добавляется кнопка '...', щелчок на которой просто запускает действие "Разделить" для сохранения и открытия
любых дополнительных вложений.
Кроме того, в версии 2.1 две настройки в модуле mailconfig.py (см. раздел 10) можно применять для управления
тем, как PyMailGUI открывает части в графическом пользовательском интерфейсе:
Обе настройки используются для действий "Разделить" в окне просмотра и кнопок быстрого доступа к частям.
Если настройка okayToOpenParts установлена в False, тогда кнопки быстрого доступа к частям не будут
отображаться в графическом пользовательском интерфейсе, а щелчок на кнопке "Разделить" приведет к сохранению
частей в каталоге без их открытия. Настройка verifyPartOpens используется как для кнопки "Разделить", так
и для кнопок быстрого доступа к частям: если она установлена в False, то щелчки на кнопках быстрого доступа
к частям обеспечивают немедленное открытие частей, а щелчок на кнопке "Разделить" вызывает автоматическое
открытие всех частей известных типов после их сохранения (части неизвестных типов и исполняемые файлы никогда
не открываются).
Дополнительный параметр verifyHTMLTextOpen в данном модуле управляет проверкой открытия веб-браузера
на основной текстовой части HTML сообщения; в случае установки verifyHTMLTextOpen в False веб-браузер
открывается без запросов. verifyHTMLTextOpen--отдельный параметр, не связанный с verifyPartOpens.
Он работает автоматически, даже если некоторые основные текстовые части HTML имеют сомнительное
содержимое (например, изображения или рекламу).
Чтобы составить сообщение электронной почты, используйте окно составления для ввода его заголовков,
добавления и редактирования основного текста сообщения и добавления любых вложений. Текст сообщения
редактируется в компоненте PyEdit в нижней части окна; щелчок на его кнопке "Сохранить" позволяет
сохранить черновик текста сообщения во временном файле, из которого его можно будет скопировать
и вставить позже.
При составлении новых сообщений щелчок на кнопке "Вложить" в окне просмотра позволяет добавить
выбранные файлы в качестве вложений, которые будут отправлены с основным текстом сообщения при щелчке
на кнопке "Отправить" в окне просмотра. Файлы вложений могут быть любого типа; они выбираются во
всплывающем диалоговом окне, но не загружаются до тех пор, пока не будет инициирована отправка.
Кнопка "Части" окна просмотра обеспечивает отображение уже добавленных вложений.
Основной текст сообщения (в редакторе окна просмотра) отправляется как простое сообщение, если
нет вложений, или как первая часть многокомпонентного сообщения MIME, если они есть. В обоих
случаях основной текст сообщения всегда отправляется как простой текст. HTML-файлы могут быть
прикреплены к сообщению, но отсутствует поддержка альтернативного текстового или HTML-формата
для основного текста, а также отправки основного текста только как HTML. Не все клиенты способны
обрабатывать HTML-формат, а текстовые окна просмотра PyMailGUI не имеют инструментов
редактирования HTML-разметку.
Вложенность при наличии множества компонент не применяется: составленные сообщения всегда
представляют собой либо простое тело, либо линейный список частей, содержащий основной
текст сообщения и файлы вложений.
При ответе и пересылке заголовкам присваиваются начальные значения, основной текст сообщения
(описанный в предыдущем разделе) переносится и цитируется с использованием префиксов '>',
а любые вложения в исходном сообщении удаляются. Вместе с сообщением отправляются только
новые вложения.
Чтобы выполнить отправку по нескольким адресам, необходимо разделять адреса получателей
в полях To (Кому), Cc (Копия) и Bcc (Скрытая копия) запятыми. Например:
Обратите внимание, что запятые могут использоваться как разделители адресов, так и быть
встроенными в компоненты имени адреса. Поскольку запятые подвергаются полному разбору
при разделении, их можно применять в обоих контекстах в списках получателей. Для ответов
это поддерживается автоматически: поле To предварительно заполняется содержимым поля
From (От) отправителя из исходного сообщения, а в поле Cc попадают все уникальные исходные
адреса получателей за исключением нового отправителя. Поля заголовков Cc и Bcc игнорируются,
если при отправке они содержат только начальный символ "?".
Составленное почтовое сообщение посылается по всем адресам, указанным в заголовках To, Cc и Bcc.
Заголовки To и Cc отправляются в самом сообщении, но заголовок Bcc--нет: содержимое заголовка
Bcc служит только для указания получателей, а не для генерации строки почтового заголовка
(это основная цель скрытой копии). Формально Bcc используется для почтового конверта, но не для
текста сообщения. По умолчанию строчка Bcc не включена, но ее можно включить в модуле mailconfig;
для удобства она предварительно заполнена адресом отправителя, потому что это распространенный
вариант использования (просто удалите этот текст в Bcc). Перед отправкой сообщения дублированные
адреса электронной почты удаляются из списка получателей. Пользователи Windows: комбинации клавиш
Ctrl+C и Ctrl+V позволяют копировать и вставлять текст в полях ввода заголовков.
Успешно отправленные сообщения сохраняются в локальном файле, имя которого указывается в модуле
mailconfig.py. Отправленные сообщения сохраняются, если в переменной sentmailfile установлено
допустимое имя файла; чтобы отключить сохранение, ее нужно установить в пустую строку. Этот файл
открывается с помощью кнопки "Открыть" в окнах со списками, а его содержимое можно просматривать,
обрабатывать, удалять, сохранять и т.д. в графическом пользовательском интерфейсе, как и вручную
сохраненный файл с почтовыми сообщениями. Как и для вручную сохраненных файлов с почтовыми
сообщениями, окно со списком для файла отправленных сообщений автоматически обновляется при каждой
отправке нового сообщения, если оно открыто (нет необходимости закрывать и снова открывать его,
чтобы увидеть новые отправленные сообщения). Когда этот файл становится слишком большим для открытия,
его содержимое можно удалить щелчком на кнопке "Удалить", предварительно сохранив важные отправленные
сообщения в другом файле с помощью кнопке "Сохранить".
Обратите внимание, что некоторые поставщики Интернет-услуг для использования своих SMTP-серверов
могут потребовать подключения к собственным системам, а некоторые серверы SMTP могут требовать
аутентификации (установите переменную smtpuser в модуле mailconfig.py, чтобы принудительно выполнять
аутентификацию при отправке). Инструменты для работы с SMTP-сервером находятся в модуле smptd
библиотеки Python; в принципе вы можете запустить свой сервер SMTP локально на localhost.
PyMailGUI запускает операции передачи из почтового сервера (загрузку, отправку и удаление) в потоках,
чтобы избежать блокировки графического пользовательского интерфейса. Операции передачи никогда
не блокируют окна в графическом пользовательском интерфейсе, а одни окна обычно не блокируют
другие окна. Во время выполнения операций передачи пользователи могут просматривать, создавать
и обрабатывать почтовые сообщения. Операции передачи выполняются в фоновом режиме, в то время
как графический пользовательский интерфейс остается активным.
PyMailGUI также позволяет потокам передачи электронной почты перекрываться во времени. В частности,
новые сообщения могут быть написаны и отправлены во время загрузки или отправки, а операции загрузки
могут перекрываться с операциями отправки и другими операциями загрузки, которые уже выполняются.
Например, ожидая загрузки заголовков почты или большого сообщения, вы можете открыть новое окно
написания, составить сообщение и отправить его; отправка будет перекрываться во времени с текущей
загрузкой. Вы также можете загрузить другое сообщение, пока идет загрузка большого сообщения.
Во время передачи электронной почты всплывающие окна отображают текущий прогресс в виде счетчика
сообщений. При отправке сообщения исходное окно редактирования автоматически всплывает при отказах
отправки, чтобы сохранить или повторить попытку. Поскольку операции удаления могут изменить номера
сообщений POP на сервере, эта операция отключает другие операции удаления и загрузки на период
своего выполнения.
Операции загрузки и удаления для автономных файлов сохраненных сообщений тоже выполняются в потоках:
эти потоки могут перекрываться во времени с операциями передачи из сервера и с операциями в других
открытых файлах сохраненных сообщений. Операции сохранения запрещаются, если исходный или целевой
файл занят операцией загрузки или сохранения. Завершение работы не разрешено, пока какой-либо поток занят.
Обновление в версии 3.0: если производится получение сообщений, то оно предотвращает любые новые запросы
получения, пока получение не закончится. Это позволяет избежать двукратного получения одного и того же
сообщения параллельно (безопасное, но бессмысленное действие). Другие операции получения могут свободно
обрабатываться параллельно, если они не пересекаются.
Почтовые сообщения не удаляются из серверов POP при запросах загрузки, а только при явных запросах
на удаление щелчком на кнопке "Удалить", если это разрешено пользователем. Запросы на удаление
выполняются немедленно после разрешения пользователем.
Чтобы удалить почтовые сообщения из сервера и обработать их автономно: в окне со списком сервера
установите флажок "Все", щелкните на кнопке "Сохранить" для сохранения всех сообщений в локальном
файле, а затем на кнопке "Удалить" для удаления всех сообщений из сервера; позже щелкните на кнопке
"Открыть", чтобы открыть файл сохраненных сообщений для просмотра и обработки сохраненной
электронной почты.
При удалении в окне со списком сервера список сообщений (и любое просматриваемое сообщение)
не загружается повторно, если удаление прошло успешно. Если удаление не удалось, тогда все сообщения
должны быть перезагружены, т.к. некоторые номера сообщений POP могли измениться; перезагрузка
инициируется автоматически. Удаление в окне списка файла происходит только в локальном файле.
Начиная с версии 2.1, PyMailGUI автоматически сопоставляет сообщения, выбранные для удаления,
с их заголовками на почтовом сервере, чтобы гарантировать удаление корректного сообщения. Если список
сообщений не синхронизирован с сервером, то сообщения, не соответствующие серверу, не удаляются,
поскольку их номера сообщений POP больше не точны. В таком случае выдается ошибка и автоматически
выполняется полная перезагрузка списка почтовых сообщений; останавливать и перезапускать PyMailGUI
для перезагрузки списка сообщений не понадобится. Это может замедлить удаление, но предотвращает
удаление неправильного сообщения. См. описание ошибок, связанных с синхронизацией номеров сообщений
POP, в следующем разделе.
PyMailGUI сопоставляет заголовки, чтобы гарантировать, что операции удаления удаляют только корректные
сообщения, и периодически обнаруживает ошибки синхронизации с сервером. Если появляется сообщение об
ошибке синхронизации, тогда операция отменяется, и автоматически выполняется полная перезагрузка списка
сообщений из сервера. Останавливать и перезапускать PyMailGUI и перезагружать список сообщений не нужно,
но придется повторить операцию после перезагрузки.
Протокол POP назначает сообщениям относительные номера, отражающие их положение в почтовом ящике. В окне
со списком сервера PyMailGUI загружает свой список сообщений по запросу из сервера и предполагает, что
с этого момента он отражает содержимое почтового ящика. Позиция сообщения в списке используется как его
относительный номер сообщения POP для последующих операций загрузки и удаления.
Обычно все работает хорошо, поскольку вновь поступившие сообщения добавляются в конец почтового ящика.
Однако номера сообщений в списке могут утратить синхронизацию с сервером двумя способами.
Чтобы учесть такие случаи, PyMailGUI 2.1 всегда сопоставляет сообщения, которые необходимо удалить,
с почтовым ящиком входящих сообщений на сервере, сравнивая уже извлеченные тексты заголовков с текстами
заголовков, возвращенными для того же номера сообщения; удаление происходит только в том случае, если они
совпадают. Кроме того, PyMailGUI выполняет быструю проверку на наличие ошибок утраты синхронизации, сравнивая
заголовки только для последнего сообщения в индексе всякий раз, когда обновляется список индекса, и всякий
раз, когда получаются полные сообщения.
Сопоставление заголовков добавляет небольшие накладные расходы к операциям удаления, загрузки списка
и получения сообщений, но гарантирует, что операции удаления не удалят некорректное сообщение, а также то,
что полученное сообщение соответствует элементу, выбранному в окне со списком сервера. Накладные расходы
проверки синхронизации обычно составляют доли секунды.
В общем случае не следует удалять сообщения в PyMailGUI, пока запущен другой почтовый клиент, иначе номера
сообщений этого клиента могут быть перепутаны, если в нем не предпринимается подобная проверка синхронизации.
Если при удалении или загрузке появляется всплывающее окно с сообщением об ошибке синхронизации, то PyMailGUI
автоматически начинает полную перезагрузку отображаемого в окне списка почтовых сообщений.
Чтобы сэкономить время, запросы на загрузку извлекают только заголовки писем, а не целые сообщения.
Операции загрузки извлекают все сообщение, если оно не было просмотрено ранее (загруженные сообщения
кешируются). Несколько операций загрузки сообщений могут перекрываться во времени и также перекрываться
операциями редактирования и отправки сообщений.
Кроме того, после начальной загрузки новые запросы на загрузку извлекают только заголовки вновь поступивших
сообщений. Однако все заголовки должны быть повторно получены после отказа операции удаления из-за
возможного изменения номеров сообщений POP.
Программа PyMailGUI подключается к почтовому серверу только во время выполнения операций загрузки, отправки
или удаления. Она вообще не подключается, если не предпринимается попытка выполнения одной из этих операций,
и отключается сразу после ее завершения. Если не выполняется одна из указанных операций, то для запуска
PyMailGUI подключение к Интернету не требуется. Вдобавок, когда операции не выполняются, можно отключиться
от Интернета, не останавливая графический пользовательский интерфейс--при следующей операции передачи
программа подключится заново.
Примечание: если почтовый сервер POP поддерживает команду TOP для получения заголовков писем (большинство
поддерживает), тогда переменная srvrHasTop в модуле mailtools.py позволяет принудительно загрузить все
сообщения.
Также обратите внимание, что хотя PyMailGUI изначально извлекает только заголовки сообщений, если почтовый
сервер поддерживает TOP (и имеет более быструю очередь действий графического пользовательского интерфейса
в версии 3.0), первоначальное извлечение все равно может занять некоторое время для очень больших почтовых
ящиков; как правило, необходимо использовать файлы сохраненных сообщений почты и операции удаления, чтобы
поддерживать небольшой размер почтового ящика.
Обновление в версии 3.0: для решения проблемы, описанной в предыдущем абзаце, предназначен параметр fetchlimit
в модуле mailconfig; он позволяет ограничить количество заголовков, которые PyMailGUI будет пытаться получить,
что делает его практичным для больших почтовых ящиков и медленного доступа в Интернет или почтовых серверов.
В версии 3.0 теперь есть поддержка кодировки Unicode (интернационализации) для извлеченных, сохраненных
и отправленных сообщений. Конфигурируемая пользователем настройка в модуле mailconfig используется на уровне
сеанса для декодирования полных байтов сообщения в строки Unicode при извлечении, а также для кодирования
и декодирования почтовых сообщений, хранящихся в текстовых файлах сохраненных сообщений.
При составлении для основного текста и вложенных текстовых частей составленных сообщений может применяться явно
указанная в mailconfig кодировка Unicode; при просмотре для определения типов Unicode как основного текста сообщения,
так и текстовых частей, открываемых по требованию, используются заголовки разобранных сообщений. Кроме того,
интернационализированные заголовки сообщений (например, "Subject", "From:") декодируются при отображении в соответствии
со стандартами электронной почты, MIME, Unicode и собственного содержимого и автоматически кодируются при отправке,
если не являются ASCII.
В настоящее время не существует специальной поддержки кодировки Unicode для полного текста отправляемых сообщений
в целом, за исключением унаследованной от библиотек Python.
Измените файл модуля mailconfig.py в домашнем каталоге PyMailGUI на своем компьютере, чтобы отразить имена
имеющихся почтовых серверов, имя пользователя, адрес электронной почты и необязательную строку подписи,
добавляемую во все составляемые сообщения.
Большинство настроек в этом модуле необязательны либо имеют разумные предустановленные значения по умолчанию.
Однако вы должны как минимум установить переменную smtpservername для отправки электронной почты, а также
popservername и popusername для загрузки электронной почты с сервера. Это простые переменные Python, которым
присваиваются строковые значения в этом файле. Детали ищите в файле модуля и в его встроенных комментариях.
Атрибут listheaders модуля mailconfig также может быть установлен в кортеж имени поля заголовка строки, чтобы
настроить набор заголовков, отображаемых в окнах со списками; размер электронной почты всегда отображается последним.
Аналогично атрибут viewheaders модуля mailconfig позволяет расширить набор заголовков, отображаемых в окне
просмотра (хотя поля From, To, Cc и Subject всегда отображаются). Окна со списками отображают заголовки сообщений
в столбцах фиксированной ширины.
Переменные в модуле mailconfig также можно применять для настройки шрифта, используемого в окнах со списками (fontsz),
столбца, в котором просматриваемый и цитируемый текст автоматически переносится (wrapsz), цветов и шрифтов в различных
окнах, локального файла, в котором сохраняются отправленные сообщения, открытия частей почтового сообщения и многого
другого; более подробную информацию ищите в исходном коде модуля.
Новое в версии 3.0: параметр fetchEncoding в этом файле используется во всем сеансе PyMailGUI для декодирования байтов
сообщения в текст перед разбором, а также для сохранения и загрузки полного текста сообщения из файлов. Установите
fetchEncoding в имя кодировки Unicode, которое подходит для имеющихся сообщений ('latin1', 'utf8' и 'ascii' являются
разумными вариантами для большинства сообщений). Если эта кодировка вместе с несколькими вариантами не сработает,
то сообщение все равно появится, если его заголовки можно декодировать, но его тело будет содержать сообщение об ошибке;
попробуйте запустить снова с другим именем кодировки для просмотра.
Новое в версии 3.0: при отправке новых сообщений параметры mainTextEncoding и attachmentTextEncoding используются для
указания кодировок Unicode для основного текста сообщения, а также всех текстовых вложений. Установите их в None, чтобы
запрашивать кодировки при отправке сообщений, в противном случае присвоенные этим параметрам значения используются
на протяжении всего сеанса (если щелкнуть на кнопке "Отмена" при запросе, то они оба по умолчанию будут "latin-1").
Установите их в результат sys.getdefaultencoding(), чтобы применить значение, по умолчанию принятое на платформе.
Система возвращается к UTF-8, если выбор не соответствует тексту для отправки.
Новое в версии 3.0: параметр headersEncodeTo используется для кодирования заголовков, отличающихся от ASCII
(и имен адресов электронной почты в заголовках), когда он не равен None; в случае None по умолчанию используется UTF-8.
Новое в версии 3.0: PyMailGUI изначально загружает только заголовки сообщений, а затем только вновь поступившие заголовки.
Однако в зависимости от скорости подключения к Интернету и сервера это может быть непрактичным для очень больших почтовых
ящиков. Для поддержки таких случаев можно использовать новый параметр fetchlimit в mailconfig для ограничения количества
заголовков (или полных сообщений, если команда TOP не поддерживается), извлекаемых при загрузке: при значении N этого
параметра PyMailGUI извлекает не более N из последних поступивших сообщений. Более старые сообщения за пределами этого
набора не получаются с сервера, а отображаются как пустые/фиктивные сообщения, которые в основном неработоспособны (хотя
их можно получить).
Новое в версии 3.0: Если параметр repliesCopyToAll имеет значение True, то операция ответа предварительно заполняет строку
Cc ответа всеми исходными получателями почты после удаления дубликатов и нового отправителя. Если параметр repliesCopyToAll
имеет значение False, тогда происходит предварительное заполнение Cc, и ответ настраивается на ответ только исходному
отправителю. В любом случае строку Cc всегда можно отредактировать позже.
Примечание: будьте осторожны при изменении модуля mailconfig, т.к. PyMailGUI может вообще не запуститься, если некоторые
из его переменных отсутствуют. Можете сделать резервную копию перед его редактированием на случай, если вам понадобится
восстановить его значения по умолчанию. В будущей версии системы может появиться диалоговое окно конфигурации, которое
генерирует код модуля mailconfig.
См. также: textConfig.py для настройки внешнего вида всплывающих окон PyEdit, созданных PyMailGUI для тестовых частей,
необработанного почтового сообщения и исходного кода (модуль mailconfig настраивает только основной текстовый компонент
PyEdit).
Эта клиентская программа в настоящее время требует Python и tkinter. Она использует потоки Python, если они установлены,
чтобы избежать блокировки графического пользовательского интерфейса. Отправка и загрузка электронной почты из сервера
требует подключения к Интернету. Повторно использует ряд модулей из дерева каталогов с примерами PP4E.
ДЕЙСТВИЯ В ОКНЕ ПРОСМОТРА
ОБРАБОТКА В АВТОНОМНОМ РЕЖИМЕ
ПРОСМОТР ТЕКСТА И ВЛОЖЕНИЙ
ОТПРАВКА ТЕКСТА И ВЛОЖЕНИЙ
PP4E@learning-python.com, "Smith, Bob" <bob@bob.com>, sue@jones.net
ОДНОВРЕМЕННОЕ ВЫПОЛНЕНИЕ ОПЕРАЦИЙ ПЕРЕДАЧИ
УДАЛЕНИЕ ПОЧТОВЫХ СООБЩЕНИЙ
СИНХРОНИЗАЦИЯ НОМЕРОВ ВХОДЯЩИХ СООБЩЕНИЙ
ЗАГРУЗКА ПОЧТОВЫХ СООБЩЕНИЙ
ПОДДЕРЖКА UNICODE И ИНТЕРНАЦИОНАЛИЗАЦИИ
КОНФИГУРАЦИОННЫЙ МОДУЛЬ mailconfig
ЗАВИСИМОСТИ
РАЗЛИЧНЫЕ СОВЕТЫ ("Шпаргалка")