Ошибка кодировки Ascii при отправке почты в python - PullRequest
0 голосов
/ 28 марта 2020

Я работаю над приложением django, и у меня есть форма, содержащая несколько полей, я могу получить значения полей через файл views.py, и когда я просто заполняю поля в engli sh, все работает как шарм но в случае моего приложения мне нужно заполнить их в арабском c. Когда я пытался сделать это и посмотреть, работает ли он так же, я получил сообщение об ошибке ниже на моем экране:

UnicodeEncodeError at / 'ascii' code c не может кодировать символы в позиции 24-27: порядковый номер не в диапазоне (128)

Это мой код:

def index(request):

  if request.POST.get('sendEmail'):
    pname = request.POST.get('patient_name')
    cr    = request.POST.get('city_region')
    mz    = request.POST.get('mazq')
    hno   = request.POST.get('house_no')
    yn    = request.POST.get('your_name')
    mob   = request.POST.get('mobile')


    if (pname != '' and cr != '' and mz != '' and hno != '' and yn != ''):
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.connect("smtp.gmail.com",587)
        server.starttls()
        server.login(username, password)
        FROM  = yn 
        print(FROM)
        TO = ["alisattarbarani@gmail.com"] 
        SUBJECT = "New Subject"
        TEXT = pname + "\n" + cr + "\n" + mz + "\n" + hno
        ms = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT + '\n' + '\n' +  FROM)
        server.sendmail(FROM, TO, ms)
        server.quit()

        msg = "Successfull Email"
        return render(request, "index.html", {"msg": msg})

    msg = "Empty Fields!"
    return render(request, "index.html", {"msg": msg})    


  return render(request, "index.html")

Я сделал много изменений в своем коде, и одна из них кодировала две переменные ОТ и ТЕКСТ но это тоже не сработало, поэтому я решил сделать это как показано ниже:

 FROM = str(yn.encode('utf-8'))
 TEXT = str(pname.encode('utf-8')) + '\n' + str(cr.encode('utf-8')) + '\n' + str(mz.encode('utf-8')) + '\n' + str(hno.encode('utf-8'))

и это сработает, потому что если я опущу str () будет возвращено: Строка не может объединять байты , поэтому я так и сделал. Я проверил свой почтовый ящик gmail и получил на картинке следующие байты:

enter image description here

Как вы можете видеть, заполняю ли я свою форму на английском языке sh все будет хорошо, вместо этого он не работает с араби c.

Любая помощь будет оценена, спасибо заранее

...