Python 将文件附加到电子邮件时发生Flask邮件递归错误

Python 将文件附加到电子邮件时发生Flask邮件递归错误,python,flask,flask-mail,Python,Flask,Flask Mail,当我尝试使用Flask Mail将文件附加到电子邮件时,我会得到一个递归错误。当不附加文件时,代码工作正常。我该如何解决这个问题 import mimetypes def send_message(to, subject, message, attachment_path=None): msg = Message() msg.sender = ('{} {}'.format( current_user.first_name.capitalize(),

当我尝试使用Flask Mail将文件附加到电子邮件时,我会得到一个
递归错误。当不附加文件时,代码工作正常。我该如何解决这个问题

import mimetypes

def send_message(to, subject, message, attachment_path=None):
    msg = Message()
    msg.sender = ('{} {}'.format(
        current_user.first_name.capitalize(),
        current_user.last_name.capitalize()
    ), current_user.email)
    msg.subject = subject
    msg.recipients.append(to)
    msg.html = message.replace("\n", "<br/>")

    if attachment_path:
        with app.open_resource(attachment_path, mode='rb') as my_file:
            extension = attachment_path[attachment_path.index('.'):]
            content_type = mimetypes.types_map[extension]
            data = my_file.read()

        msg.attach(filename=attachment_path, content_type=content_type, data=data)

    mail.send(msg)
导入模拟类型
def发送消息(收件人、主题、消息、附件路径=无):
msg=消息()
msg.sender=('{}{}'。格式(
当前用户。第一个名称。大写(),
当前用户。姓氏。大写()
),当前用户。电子邮件)
msg.subject=主语
msg.recipients.append(到)
msg.html=message.replace(“\n”和“
”) 如果附件路径: 使用app.open_资源(附件路径,mode='rb')作为我的_文件: 扩展名=附件路径[附件路径.索引('.'):] 内容类型=mimetypes.types\u映射[扩展] data=my_file.read() msg.attach(文件名=附件路径,内容类型=内容类型,数据=数据) 邮件发送(msg)
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第2000行,在调用中__
返回self.wsgi_应用程序(环境,启动响应)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1991行,在wsgi\U应用程序中
响应=self.make\u响应(self.handle\u异常(e))
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1567行,在句柄中
重放(exc_类型、exc_值、tb)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\\u compat.py”,第33行,重新登录
增值
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1988行,在wsgi\U应用程序中
response=self.full\u dispatch\u request()
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1641行,完全发送请求
rv=自身处理用户异常(e)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1544行,在handle\u user\u异常中
重放(exc_类型、exc_值、tb)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\\u compat.py”,第33行,重新登录
增值
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1639行,完全发送请求
rv=自我分派请求()
文件“C:\Program Files\Anaconda3\lib\site packages\flask\app.py”,第1625行,在调度请求中
返回self.view_函数[rule.endpoint](**req.view_参数)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\u login\utils.py”,第228行,在装饰视图中
返回函数(*args,**kwargs)
文件“C:\Users\Ziyad Yehia\OneDrive\flask practice\duty\u report\u sender\u 2\app\Users\views.py”,第231行,在消息中
发送消息(recipient.email,subject=form.subject.data,message=form.message.data,attachment\u path=attachment\u path)
文件“C:\Users\Ziyad Yehia\OneDrive\flask practice\duty\u report\u sender\u 2\app\email.py”,第85行,发送消息
邮件发送(msg)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\u mail.py”,第492行,发送
message.send(连接)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\u mail.py”,第427行,发送
连接。发送(自我)
文件“C:\Program Files\Anaconda3\lib\site packages\flask\u mail.py”,第190行,在send中
message.as_bytes()如果PY3 else message.as_string(),
文件“C:\Program Files\Anaconda3\lib\site packages\flask\u mail.py”,第385行,以字节为单位
以字节()形式返回self.\u message()
文件“C:\Program Files\Anaconda3\lib\email\message.py”,第179行,以字节为单位
fp=BytesIO()
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第115行,扁平化
self.write(ufrom+self.\n)
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第181行,写入
self.\u fp=sfp=self.\u新建\u缓冲区()
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第214行,在调度中
meth=自身。\u写本
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第272行,在多部分中
g=自我克隆
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第115行,扁平化
self.write(ufrom+self.\n)
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第195行,写入
如果meth为无:
文件“C:\Program Files\Anaconda3\lib\email\generator.py”,第422行,在写标题中
#8位字节的字符串。
文件“C:\Program Files\Anaconda3\lib\email\policy.py”,第190行,折叠式二进制
折叠=self.\u折叠(名称、值、重新折叠\u二进制=self.cte\u类型=='7bit')
文件“C:\Program Files\Anaconda3\lib\email\policy.py”,第204行,折叠
返回self.header_factory(名称“”).join(行)).fold(policy=self)
文件“C:\Program Files\Anaconda3\lib\email\headerregistry.py”,第255行,折叠
返回页眉.fold(策略=策略)
文件“C:\Program Files\Anaconda3\lib\email\\u header\u value\u parser.py”,第300行,折叠
自折叠(折叠)
文件“C:\Program Files\Anaconda3\lib\email\\标题\值\解析器.py”,第1228行,折叠
休息。\折叠(折叠)
文件“C:\Program Files\Anaconda3\lib\email\\标题\u值\u parser.py”,第347行,折叠
如果折叠。如果合适,则追加(零件):
文件“C:\Program Files\Anaconda3\lib\email\\页眉\u值\u parser.py”,第149行,如果合适的话,在append\u中
令牌。\u折叠(自身)
文件“C:\Program Files\Anaconda3\lib\email\\标题\值\解析器.py”,第338行,折叠
如果折叠。如果合适,则追加(零件,tstr):
文件“C:\Program Files\Anaconda3\lib\email\\页眉\u值\u parser.py”,第149行,如果合适的话,在append\u中
令牌。\u折叠(自身)
文件“C:\Program Files\Anaconda3\lib\email\\标题\值\解析器.py”,第338行,折叠
如果折叠。如果合适,则追加(零件,tstr):
文件“C:\Program Files\Anaconda3\lib\email\\页眉\u值\u parser.py”,第149行,如果合适的话,在append\u中
令牌。\u折叠(自身)
#已删除约1000个递归
文件“C:\Program Files\Anaconda3\lib\email\\标题\值\解析器.py”,第325行,折叠
tstr=str(部分)
文件“C:\Program Files\Anaconda3\lib\email\\头文件\u值\u parser.py”,第196行,在__
返回“”。加入(str(x)表示self中的x)
文件“C:\Program Files\Anaconda3\lib\email\\u header\u value\u parser.py”
Traceback (most recent call last):
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1991, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1567, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Program Files\Anaconda3\lib\site-packages\flask\app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask_login\utils.py", line 228, in decorated_view
    return func(*args, **kwargs)
  File "C:\Users\Ziyad Yehia\OneDrive\flask practice\duty_report_sender_2\app\users\views.py", line 231, in message
    send_message(recipient.email, subject=form.subject.data, message=form.message.data, attachment_path = attachment_path)
  File "C:\Users\Ziyad Yehia\OneDrive\flask practice\duty_report_sender_2\app\email.py", line 85, in send_message
    mail.send(msg)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask_mail.py", line 492, in send
    message.send(connection)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask_mail.py", line 427, in send
    connection.send(self)
  File "C:\Program Files\Anaconda3\lib\site-packages\flask_mail.py", line 190, in send
    message.as_bytes() if PY3 else message.as_string(),
  File "C:\Program Files\Anaconda3\lib\site-packages\flask_mail.py", line 385, in as_bytes
    return self._message().as_bytes()
  File "C:\Program Files\Anaconda3\lib\email\message.py", line 179, in as_bytes
    fp = BytesIO()
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 115, in flatten
    self.write(ufrom + self._NL)
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 181, in _write
    self._fp = sfp = self._new_buffer()
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 214, in _dispatch
    meth = self._writeBody
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 272, in _handle_multipart
    g = self.clone(s)
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 115, in flatten
    self.write(ufrom + self._NL)
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 195, in _write
    if meth is None:
  File "C:\Program Files\Anaconda3\lib\email\generator.py", line 422, in _write_headers
    # strings with 8bit bytes.
  File "C:\Program Files\Anaconda3\lib\email\policy.py", line 190, in fold_binary
    folded = self._fold(name, value, refold_binary=self.cte_type=='7bit')
  File "C:\Program Files\Anaconda3\lib\email\policy.py", line 204, in _fold
    return self.header_factory(name, ''.join(lines)).fold(policy=self)
  File "C:\Program Files\Anaconda3\lib\email\headerregistry.py", line 255, in fold
    return header.fold(policy=policy)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 300, in fold
    self._fold(folded)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 1228, in _fold
    rest._fold(folded)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 347, in _fold
    if folded.append_if_fits(part):
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 149, in append_if_fits
    token._fold(self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 338, in _fold
    if folded.append_if_fits(part, tstr):
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 149, in append_if_fits
    token._fold(self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 338, in _fold
    if folded.append_if_fits(part, tstr):
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 149, in append_if_fits
    token._fold(self)
# ~1000 recursions removed
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 325, in _fold
    tstr = str(part)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 196, in __str__
    return ''.join(str(x) for x in self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 196, in <genexpr>
    return ''.join(str(x) for x in self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 196, in __str__
    return ''.join(str(x) for x in self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 196, in <genexpr>
    return ''.join(str(x) for x in self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 196, in __str__
    return ''.join(str(x) for x in self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 196, in <genexpr>
    return ''.join(str(x) for x in self)
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 633, in __str__
    return quote_string(''.join(str(x) for x in self))
  File "C:\Program Files\Anaconda3\lib\email\_header_value_parser.py", line 633, in <genexpr>
    return quote_string(''.join(str(x) for x in self))
RecursionError: maximum recursion depth exceeded while calling a Python object