首页 > 编程问答 >使用 django 的 EmailMessage 发送波斯语电子邮件时出现问题

使用 django 的 EmailMessage 发送波斯语电子邮件时出现问题

时间:2024-08-04 16:20:41浏览次数:7  
标签:python django email unicode farsi

我对 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

相关文章

  • 如何使用 Python 在 Google 或 DuckDuckGo 中快速获取答案
    我有一个人工智能助手项目,我希望它在互联网上搜索。我想使用适用于Python的GoogleQuickAnswerBox或DuckDuckGoInstantAnswerAPI。我看到了其他问题,但它们对我没有多大帮助。这是我想要实现的一个示例:问题:什么是长颈鹿?Google的答案:DuckDuckGo的......
  • 如何为可以在递归调用中重新分配的 python 函数制定类型提示?
    采取以下最小示例:S=TypeVar("S",bound=int|str)defmeth(a:S)->S:ifa=="5":returnstr(meth(int(a)))returna特别是,上面的方法可以采用字符串或整数。它总是返回与其输入相同类型的值,但它可以递归地调用自身,在这种情况下,S的值......
  • 使用 python 和 json 抓取该网站的正确 URL 是什么?
    试图抓取这个网站-->https://ucr.gov/enforcement/1000511它曾经使用下面的代码,然后停止了。无法获取响应中的json或任何内容。query="1000511"url='https://ucr.gov/api/enforcement/{}'.format(query)headers={'User-Agent':'Mozilla/5.0(......
  • Python逆向
    参考链接:https://www.bilibili.com/video/BV1JL4y1p7Tt/?spm_id_from=333.999.0.0https://bbs.kanxue.com/thread-282542.htmhttps://blog.csdn.net/weixin_35967330/article/details/114390031?spm=1001.2014.3001.5501https://0xd13a.github.io/ctfs/0ctf2017/py/前言:py......
  • Python中使用正则表达式
    摘要:正则表达式,又称为规则表达式,它不是某种编程语言所特有的,而是计算机科学的一个概念,通常被用来检索和替换某些规则的文本。一.正则表达式的语法①行定位符行定位符就是用来描述字符串的边界。"^"表示行的开始,"$"表示行的结束。^tm  #tmequalTomorrowMoon可以......
  • 如何在python中使用xarray打开grib2文件?
    将xarray导入为xr导入cfgrib导入生态码将pandas导入为pddata=xr.open_dataset(r"C:\Users\new\forecast_data.grib2",engine="cfgrib")这是我的代码。我只想使用xarray读取这个文件。错误是:无法识别的引擎cfgrib必须是以下之一:['netcdf4'、'scipy'、'......
  • 如何在 java 或 python 中使用 HTTP(S) 解决无法解析的主机名或无法识别的名称错误?
    我尝试以编程方式访问网站的信息,但在Java和Python上都无法解析主机名。如果我指定IP地址,则会将错误更改为TLSV1_UNRECOGNIZED_NAME。不过,这个网站无需任何额外的工作就可以通过任何浏览器解决。我在这里浏览了很多潜在的解决方案,但对于Python,它说这个问题应该在2.7......
  • Python 请求 POST 请求与 websockets 库一起使用时挂起
    我使用Python中的requests库发送POST请求,同时维护与websockets库的WebSocket连接:importasyncioimportrequestsimportwebsocketsasyncdefwebsocket_handler(uri):asyncwithwebsockets.connect(uri)aswebsocket:whileTrue:me......
  • 在Python中,list1[::] = list2的空间复杂度是多少?
    此代码首先迭代列表nums,更新整数0、1、2(也分别称为红色、白色和蓝色)的计数。nums保证只有整数0、1和/或2。找到计数后,代码使用[::],这是一种就地修改列表的技巧,以排序numsdefsortColors(self,nums:List[int])->None:re......
  • [附开题]flask框架高校资产管理系统d8y3s(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育事业的快速发展,高校资产规模日益庞大,种类繁多,管理难度显著增加。传统的资产管理方式往往依赖于手工记录和纸质档案,不仅效率低......