You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask API中使用email包解析原始邮件返回空值问题求助

解决Flask中email包解析原始邮件返回空字符串的思路

问题分析

你的代码直接调用e.get_payload()获取内容,但忽略了邮件编码、多部分结构以及请求数据格式问题,这是导致返回空字符串的核心原因。

具体解决步骤

1. 校验请求获取的邮件内容格式

首先确认request.form['Content']拿到的是完整且格式正确的原始邮件:

  • 在emails()函数中添加打印,输出new_email的实际内容,检查换行符是否为\n而非转义后的\\n
  • 如果存在转义问题,先做替换处理:
    new_email = request.form['Content'].replace('\\n', '\n')
    
  • 如果邮件字符串带有首尾单引号(如示例中的'Message-ID: ...'),需先去除:
    new_email = request.form['Content'].strip("'")
    

2. 完善邮件解析逻辑

修改get_content函数,加入编码解码处理和多部分邮件判断:

def get_content(message):
    e = email.message_from_string(message)
    content = []
    
    # 处理多部分邮件
    if e.is_multipart():
        for part in e.walk():
            # 仅提取纯文本内容
            if part.get_content_type() == 'text/plain':
                # 获取字符编码,默认用us-ascii
                charset = part.get_content_charset() or 'us-ascii'
                # 解码payload
                payload = part.get_payload(decode=True)
                if payload:
                    content.append(payload.decode(charset))
        return '\n'.join(content)
    else:
        # 单部分纯文本邮件
        charset = e.get_content_charset() or 'us-ascii'
        payload = e.get_payload(decode=True)
        return payload.decode(charset) if payload else ""

3. 调试定位问题节点

在解析过程中添加调试打印,快速定位异常:

def get_content(message):
    print("原始输入片段:", message[:200])
    e = email.message_from_string(message)
    print("邮件Content-Type:", e.get('Content-Type'))
    print("是否为多部分邮件:", e.is_multipart())
    print("原始payload片段:", e.get_payload()[:200])
    
    # 后续解析逻辑...

内容的提问来源于stack exchange,提问作者WhoAmI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:43:15