2016-02-04 2 views
1

Я использовал этот code, чтобы помочь мне отправлять письма с сервера linux, все работает нормально, за исключением того, что если бы был арабский символ, все сообщения электронной почты будут примерно такими: 2YrYs9mK2KfYq9i62KfZhNix2LPZig ==Арабские символы в письмах получаются декодированными (Django)

Обратите внимание, что я использую Python 3.

PS: в коде я добавил .encode('utf-8') в строке 46, потому что я использовал, чтобы получить эту ошибку «ул» не поддерживает интерфейс буфера


UPDATE:

вот данные, которые я отправляю с помощью функции электронной почты

theemail = EmailMessage(subject, message , sender_email, recipients, headers = { 
         'Reply-To': sender_email, 'Content-Type':'text/html; charset=utf-8', 
         'From':'[email protected]', 'Return-Path':sender+' <'+sender_email+'>', 
         'Organization':sender, 'MIME-Version':'1.0', 'Content-Transfer-Encoding':'8bit', 
         'X-Priority':'3', 'X-Originating-IP':request.META.get('REMOTE_ADDR'), 
         'X-Mailer':'Python/3.4', 'Message-ID':make_msgid(), 'Date':datetime.datetime.now().time()}) 

theemail.content_subtype = "html" # though I'm still seeing the <br/> tag as a string instead of giving me a new line LOL 
theemail.send() 
+4

ну, '.encode' используется для преобразования строки в байты, поэтому, если вы использовали ее, чтобы сделать наоборот, у вас проблемы. Пожалуйста, прочтите http: //www.joelonsoftware.com/articles/Unicode.html, прежде чем наносить вред себе дальше. – jsbueno

+0

, но этот answerr может иметь mroe в него, чем просто правильно кодировать символы - это похоже на проблему правильной маркировки кодировки в заголовках и добавления мальчика в соответствии с соглашением. Символы не ASCII в заголовках hte (например, строка «Тема» или строки «от» и «до») должны получать разные разметки, чтобы сигнализировать их кодировку. Вы должны опубликовать свой код и фактический мусор, который вы получаете (символы перед преобразованием и после преобразования (не просто «как это» - необходим фактический результат) – jsbueno

+0

@jsbueno Я добавил проблему, которую я раньше делал добавьте .encode к коду, если он помогает –

ответ

0

Я решил проблему, моя проблема была с линией я редактировал в коде сниппета я использовал для отправки электронной почты

Вы видите в исходном коде ps.stdin.write(email_message.message().as_string()) и я добавил .encode('utf-8'), чтобы превратить вывод в байты! чтобы решить проблему я добавил .as_bytes() вместо .as_string()

я искал причину, и я узнал, что в Python3 bytes могут быть расшифрованы в str и str могут быть закодированы bytes, а наоборот нет!

Смежные вопросы