flask-mail遇到的编码问题

news/2024/12/2 14:40:16/

首先碰到的下面的报错:

[2023-07-17 00:00:31,202] ERROR in app: Exception on /test [GET]
Traceback (most recent call last):File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 2190, in wsgi_appresponse = self.full_dispatch_request()^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 1486, in full_dispatch_requestrv = self.handle_user_exception(e)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 1484, in full_dispatch_requestrv = self.dispatch_request()^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 1469, in dispatch_requestreturn self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\app.py", line 46, in send_mailmail.send(msg)File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 491, in sendwith self.connect() as connection:File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 144, in __enter__self.host = self.configure_host()^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 163, in configure_hosthost.starttls()File "D:\software\Python311\Lib\smtplib.py", line 769, in starttlsself.ehlo_or_helo_if_needed()File "D:\software\Python311\Lib\smtplib.py", line 611, in ehlo_or_helo_if_neededif not (200 <= self.ehlo()[0] <= 299):^^^^^^^^^^^File "D:\software\Python311\Lib\smtplib.py", line 451, in ehloself.putcmd(self.ehlo_msg, name or self.local_hostname)File "D:\software\Python311\Lib\smtplib.py", line 378, in putcmdself.send(f'{s}{CRLF}')File "D:\software\Python311\Lib\smtplib.py", line 357, in sends = s.encode(self.command_encoding)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 9-11: ordinal not in range(128)

遇到这个报错,第一时间修改上面错误堆栈中的command_encoding,如下:

    def send(self, s):"""Send `s' to the server."""if self.debuglevel > 0:self._print_debug('send:', repr(s))if self.sock:if isinstance(s, str):# send is used by the 'data' command, where command_encoding# should not be used, but 'data' needs to convert the string to# binary itself anyway, so that's not a problem.s = s.encode(self.command_encoding)sys.audit("smtplib.send", self, s)

如上smtplib.py文件修改self.command_encoding,直接换成’utf8’就行,修改完以后,重启项目,就会报下面的错:

[2023-07-17 00:02:35,060] ERROR in app: Exception on /test [GET]
Traceback (most recent call last):File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 2190, in wsgi_appresponse = self.full_dispatch_request()^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 1486, in full_dispatch_requestrv = self.handle_user_exception(e)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 1484, in full_dispatch_requestrv = self.dispatch_request()^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask\app.py", line 1469, in dispatch_requestreturn self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\app.py", line 46, in send_mailmail.send(msg)File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 492, in sendmessage.send(connection)File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 427, in sendconnection.send(self)File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 190, in sendmessage.as_bytes() if PY3 else message.as_string(),^^^^^^^^^^^^^^^^^^File "D:\Desktop\GitHub\personal-information-platform\venv\Lib\site-packages\flask_mail.py", line 385, in as_bytesreturn self._message().as_bytes()^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\software\Python311\Lib\email\message.py", line 208, in as_bytesg.flatten(self, unixfrom=unixfrom)File "D:\software\Python311\Lib\email\generator.py", line 116, in flattenself._write(msg)File "D:\software\Python311\Lib\email\generator.py", line 199, in _writeself._write_headers(msg)File "D:\software\Python311\Lib\email\generator.py", line 422, in _write_headersself._fp.write(self.policy.fold_binary(h, v))^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\software\Python311\Lib\email\policy.py", line 202, in fold_binaryreturn folded.encode(charset, 'surrogateescape')^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 56-58: ordinal not in range(128)

然后进去policy.py文件中修改下面信息

        folded = self._fold(name, value, refold_binary=self.cte_type=='7bit')charset = 'utf8' if self.utf8 else 'ascii'return folded.encode(charset, 'surrogateescape')

如上出问题的policy.py文件中,修改如上charset部分,删去charset = 'utf8' if self.utf8 else 'ascii'部分就行,然后就ok了,各种百度都找不到要的答案真的烦。记录一下。


http://www.ppmy.cn/news/917543.html

相关文章

ubunttu: 使用DiskGenius克隆系统和分区

M2.2242 SSD225GB用了两年,空间紧张,频繁删除读写,寿命已尽,需要把资料迁移到一个大的SSD中.当然可以使用各种黑框下的linux命令,总感觉不大友好. Ghost不能完成此功能,Ghost只能识别古老的linux分区.若想分区拷贝,只能使用全盘复制. DiskGenius可以完成克隆分区功能, 但 Diskg…

DiskGenius 百度云下载链接

链接: https://pan.baidu.com/s/1mT1yyEqOOec0xYe5CZkGOQ 提取码: w5ye

DiskGenius标准版 4.8.0 正式版

DiskGenius是一款专家级的数据恢复软件&#xff0c;技术高超、功能全面。提供了堪称经典的丢失分区恢复功能、完善的误删除文件恢复功能、各种原因导致的分区损坏文件恢复功能。特别是标准版与专业版的数据恢复功能算法精湛、考虑周全&#xff0c;并仍在不断优化增强中。 Disk…

轻松调节磁盘大小--利用diskgenius实现磁盘空间再分配

文章目录 前言一、diskgenius简介二、步骤1.安装Diskgenius2.使用方法 三、注意事项总结 前言 随着下载软件的增多&#xff0c;愈发觉得C盘空间不够用&#xff0c;于是计划把闲置的E盘空间全分配给C盘。然而常规的拓展卷方法只能在邻盘有未分配空间时才可用。而我的D盘装有许多…

diskgenius 数据迁移_Windwos 10系统迁移的一种方法

免责声明 本贴所示的方式非官方的迁移系统的方法,请不要在没有把握的前提下对任何企事业单位的公用电脑,服务器等进行操作。本贴所示的迁移方法风险较大,请谨慎操作!如出现任何数据损失,与本人无关! 本贴使用的系统版本为Windows 10 专业版1909。处理器为AMD Ryzen 5 140…

[转]数据恢复 文件恢复工具 DiskGenius v4.9.1 绿色专业版及单文件

必备神软!数据恢复及磁盘分区利器DiskGenius,目前最新版为v4.9.1,现在又有新思路的已注册专业版,已亲测可成功恢复4G以上的大文件,但不能虚拟磁盘格式转换!想用新版功能的有福了,推荐使用! DiskGenius,集数据恢复、分区管理、备份还原等多功能于一身的超级工具软件。 …

linux 硬盘克隆diskgen,DiskGenius-硬盘分区及数据恢复软件-DiskGenius下载 v5.2.0.884官方版-完美下载...

DiskGenius是一款非常出名的硬盘分区及数据恢复软件,完美支持Windows系统,拥有分区备份、硬盘复制、数据恢复等功能,操作简单,适合所有人。 DiskGenius软件简介 DiskGenius是一款集数据恢复、硬盘分区、系统备份还原等功能于一体的软件,支持对GPT磁盘(使用GUID分区表)的分…

DiskGenius

系统迁移 https://www.diskgenius.cn/help/system-migration.php DiskGenius是一款硬盘分区及数据恢复软件。它是在最初的DOS版的基础上开发而成的。Windows版本的DiskGenius软件&#xff0c;除了继承并增强了DOS版的大部分功能外(少部分没有实现的功能将会陆续加入)&#xf…