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

Django/Python搭建SendGrid邮件解析Webhook时解析失败求助

解决SendGrid Webhook接收数据解析错误问题

你的问题出在SendGrid的Inbound Parse Webhook发送的是multipart/form-data格式的表单数据,而非JSON,所以直接用json.loads解析request.body会报错。

从你打印的request.body内容能看到,数据是带boundary的表单结构,包含headers、from、to、subject、html等表单字段,需要用Django处理表单数据的方式来获取。

修正后的代码如下:

import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def receive_email_hook(request):
    # 仅处理POST请求
    if request.method != 'POST':
        return HttpResponse(status=405)
    
    try:
        # 从POST表单中直接提取核心字段
        sender = request.POST.get('from')
        recipient = request.POST.get('to')
        subject = request.POST.get('subject')
        body_html = request.POST.get('html')
        
        # 若需要解析邮件头(headers字段是JSON格式字符串)
        headers_str = request.POST.get('headers')
        headers = json.loads(headers_str) if headers_str else {}
        
        print(f"SUBJECT: {subject}")
        print(f"SENDER: {sender}")
        # 此处可添加业务逻辑,比如将邮件内容存入数据库等
        
        return HttpResponse(status=200)
    except Exception as e:
        print(f"ERROR: {str(e)}")
        return HttpResponse(status=400)

关键说明:

  • SendGrid的Inbound Webhook会把邮件内容拆分为多个表单字段,常用字段包括:
    • from: 发件人信息
    • to: 收件人信息
    • subject: 邮件主题
    • html: 邮件HTML内容
    • text: 邮件纯文本内容
    • headers: JSON格式的邮件头字符串
  • 无需手动解析request.body,Django会自动处理multipart/form-data格式的请求,直接通过request.POST获取字段即可。
  • 如果需要处理邮件附件,可通过request.FILES对象获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:52:39