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
相关产品推荐
相关产品推荐

