.sendmail функция пытается конвертировать в ASCII, мне нужно конвертировать? - PullRequest
0 голосов
/ 22 ноября 2018

Итак, я пытаюсь отправить электронное письмо, используя python, но не могу, если оно конвертирует его в ASCII, есть ли способ обойти это или мне нужно найти другую функцию?

File "/usr/lib/python3.6/smtplib.py", line 855, in sendmail
    msg = _fix_eols(msg).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 1562: ordinal not in range(128)

Могу ли я обойти это или у меня есть конвертация?и как мне конвертировать?

1 Ответ

0 голосов
/ 22 ноября 2018

Обычно SMTP требует, чтобы сообщение, которое вы отправляете, было в ASCII.Проблема в начале процесса: сообщение, которое вы пытаетесь передать, должно быть уже преобразовано в правильное сообщение MIME при его создании.

Как правило, любые двоичные данные должны быть преобразованы, чтобы иметь Content-Transfer-Encoding: base64 и любой текст не ASCII должен иметь Content-Transfer-Encoding: quoted-printable.Затем вы можете безопасно использовать байты, отличные от ASCII, и кодировка передачи обеспечивает прозрачное преобразование полезной нагрузки в ASCII для транспорта, а программное обеспечение электронной почты получателя обеспечивает его отображение в соответствии с вашими намерениями.

Библиотека email Pythonуже знает, как позаботиться об этих вещах.Возможно, вы пытаетесь создать сообщение вручную, фактически не проверяя, что говорят спецификации?Но использовать стандартную библиотеку, очевидно, проще и избавляет вас от трудностей в обучении.

Конкретные подробности см., Например, , как отправить часть тела электронного письма через MIMEMultipart

В настоящее время существуют условия для расширения SMTP для повсеместной обработки UTF-8, но сообщение об ошибке говорит о том, что ваш Sendmail еще не выполнил поставленную задачу.(Или, возможно, есть вариант, который вы можете добавить в его конфигурацию, но это далеко выходит за рамки этого вопроса и вопроса переполнения стека.)

...