我对 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 项目之外,并且我可以在控制台中打印波斯语字母)。有人可以告诉我这个错误是什么以及如何修复它吗?
我问了一些人工智能并尝试了一堆解决方案,例如使用
.encode('utf-8')
和使用django的
smart_str
对主题和正文进行编码,或者使用python的unicode 字符串如
u'این یک پیام تستی است'
我什至尝试搞乱 django 的
settings.py
,例如尝试更改
DEFAULT_CHARSET
(尽管默认情况下它已设置为
'utf-8'
)或将默认语言更改为波斯语以查看是否有帮助,但这些都不起作用,错误仍然存在。
顺便说一句,我使用的是 Windows 10 机器、python 3.12 和 django 5.0
出现“
'charmap' codec can't encode character ...
”错误的原因是,系统上的默认编码无法处理波斯语字符。尽管可能已在 Django 设置中正确配置了 UTF-8,但发送电子邮件函数可能仍在使用其他编码。
可以通过在发送邮件时指定
charset
参数来解决此问题:
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)
# 设置邮件编码为 UTF-8
email.encoding = 'utf-8'
email.send()
except Exception as e:
print(f'\n\nFailed to send email: {e}\n\n')
通过在
EmailMessage
对象中设置
encoding='utf-8'
,可以确保使用正确的编码发送电子邮件,并且波斯语字符将正确显示。
此外,请确保的编辑器也使用 UTF-8 编码保存文件。 这将有助于防止在处理代码中的波斯语字符时出现任何潜在问题。
标签:python,django,email,unicode,farsi From: 78826379