Проблема отправки персидских писем с помощью EmailMessage в django
Я довольно новичок в django и пытался отправить письмо, содержащее персидские буквы, используя django.core.mail.EmailMessage
. Вот мой код:
from django.core.mail import EmailMessage
from django.conf import settings
def custom_sender(subject: str, body: str, recipient_list: list[str], attachments: list[str] = (), content_type_html: bool = False):
try:
email = EmailMessage(
subject,
body,
settings.DEFAULT_FROM_EMAIL,
recipient_list,
)
if content_type_html:
email.content_subtype = "html"
for attachment in attachments:
email.attach_file(attachment)
email.send()
except Exception as e:
print(f'\n\nFailed to send email: {e}\n\n')
и вот как я пытался использовать его в своем представлении :
custom_sender(subject='ایمیل تستی',
body='این یک ایمیل تستی است.',
recipient_list=[user.email])
но я столкнулся с этой ошибкой :
'charmap' codec can't encode character '\u06cc' in position 1: character maps to <undefined>
Я заметил, что не могу вывести персидские буквы в консоли в моем проекте django и постоянно сталкиваюсь с этой же ошибкой (это не происходит за пределами моего проекта django, и я могу вывести персидские буквы в консоли). кто-нибудь может сказать мне, что это за ошибка и как я могу ее исправить?
Я спрашивал у некоторых AI и перепробовал кучу решений, таких как кодирование темы и тела с помощью .encode('utf-8')
и использование smart_str
в django, или использование юникодных строк в python, как
u'این یک پیام تستی است'
Я даже пробовал возиться с setting.py
django, например, попытаться изменить DEFAULT_CHARSET
(хотя по умолчанию он уже установлен на 'utf-8'
) или изменить язык по умолчанию на персидский, чтобы посмотреть, поможет ли это, но ничего из этого не помогло, и ошибка осталась.
Во-первых, вам нужно настроить часовой пояс в файле settings.py :
import locale
LANGUAGE_CODE = 'fa-ir'
locale.setlocale(locale.LC_ALL, "fa_IR.UTF-8")
TIME_ZONE = 'Asia/Tehran'
USE_I18N = True
USE_L10N = True
USE_TZ = True
и затем настройте промежуточное ПО в файле settings.py следующим образом :
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Обратите внимание: Локальное промежуточное ПО должно располагаться после общего промежуточного ПО.
Для получения дополнительной информации смотрите этот пост.
Внесите эти изменения в ваш проект и отправьте дальнейшую информацию. Удачи.