Обычно SMTP требует, чтобы сообщение, которое вы отправляете, было в ASCII.Проблема в начале процесса: сообщение, которое вы пытаетесь передать, должно быть уже преобразовано в правильное сообщение MIME при его создании.
Как правило, любые двоичные данные должны быть преобразованы, чтобы иметь Content-Transfer-Encoding: base64
и любой текст не ASCII должен иметь Content-Transfer-Encoding: quoted-printable
.Затем вы можете безопасно использовать байты, отличные от ASCII, и кодировка передачи обеспечивает прозрачное преобразование полезной нагрузки в ASCII для транспорта, а программное обеспечение электронной почты получателя обеспечивает его отображение в соответствии с вашими намерениями.
Библиотека email
Pythonуже знает, как позаботиться об этих вещах.Возможно, вы пытаетесь создать сообщение вручную, фактически не проверяя, что говорят спецификации?Но использовать стандартную библиотеку, очевидно, проще и избавляет вас от трудностей в обучении.
Конкретные подробности см., Например, , как отправить часть тела электронного письма через MIMEMultipart
В настоящее время существуют условия для расширения SMTP для повсеместной обработки UTF-8, но сообщение об ошибке говорит о том, что ваш Sendmail еще не выполнил поставленную задачу.(Или, возможно, есть вариант, который вы можете добавить в его конфигурацию, но это далеко выходит за рамки этого вопроса и вопроса переполнения стека.)