Если вы этого еще не сделали, прочитайте текст врезки «Ограничения на выгрузку файлов модели CGI в версии 3.1» в конце предыдущей главы. Если коротко, модуль cgi в Python 3.1, а также используемый им механизм синтаксического анализа в пакете email, возбуждает исключение при попытке выгрузить на сервер файл с двоичными данными или с текстом в несовместимой кодировке. К сожалению, поскольку система PyMailCGI, рассматриваемая в этой главе, использует для выгрузки вложений модель CGI, это ограничение означает, что данная система в настоящее время не поддерживает отправку почты с двоичными вложениями, такими как изображения и аудиофайлы. Такая поддержка была в версии для предыдущего издания, выполнявшейся под управлением Python 2.X.
Отправка таких вложений поддерживается обычным настольным приложением PyMailGUI, представленным в главе 14, по той простой причине, что оно имеет возможность напрямую читать данные из локальных файлов (используя двоичный режим, если это необходимо, и преобразовывая данные в формат MIME перед включением их в сообщение электронной почты). Однако, так как веб-приложение PyMailCGI, рассматриваемое здесь, опирается на получение файлов вложений, выгружаемых на сервере через CGI, оно полностью находится во власти ограничений, обусловленных нарушенной поддержкой выгрузки файлов в модуле cgi. Разработка другого модуля взамен cgi — слишком грандиозная задача для этой книги.
За счет применения некоторых технологий на стороне клиента, таких как AJAX, вполне возможно реализовать отправку двоичных файлов вообще без использования модели CGI. Однако для этого потребовалось бы развертывать фреймворки и использовать технологии, не рассматривающиеся в этой книге, что подразумевало бы совершенно иную, более сложную организацию программы, которая бы избавляла от любой зависимости от ограничений в Python 3.X. Но прежде чем писать новую программу (PyMailRIA?), подождем окончательного вердикта относительно поддержки CGI в Python 3.X.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011