在Flask中,Sendgrid入站webhook数据完全空白,但是处理请求发送的请求?

时间:2015-12-30 21:27:38

标签: python flask sendgrid

我现在有一个heroku烧瓶应用程序。当它收到POST请求时,它使用sendgrid API将电子邮件发送到包含POST数据的个人电子邮件。相关代码(driver.sendgridemail是用https://github.com/sendgrid/sendgrid-python编写的python的示例代码),其中一个字符串作为参数传递:

@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == "POST":
    data = request.data.decode('utf-8')
    driver.sendgridemail("Data is here: %s" % (data)) 
    return data
else:
    return render_template("index.html")

当我使用requests.post发布POST时:

requests.post("my_heroku_url", data=json.dumps({"some":"data"}), headers={"Content-Type":"application/json"})

我收到一封电子邮件,其中包含"数据在此处:{"某些":"数据"}"

但是,当我使用sendgrid入站解析功能时,转发到我的个人电子邮件的唯一电子邮件是"数据在此处:"这显然不太理想。

是否与内容类型有关?为什么不处理来自收到的电子邮件的数据?它显然收到了电子邮件,因为它能够被转发到每个烧瓶应用程序的个人电子邮件,它只是无法检索数据。换句话说,POST请求通过,但它无法检索任何数据并给我一个空白的二进制字符串。最后,有点奇怪的是仍然认为它是b" ?这是否意味着它永远不会被解析为使用sendgrid解析的字符串,但它是否与python请求发布?

2 个答案:

答案 0 :(得分:2)

根据docs

  

将发送到HTTP端点的请求将编码为multipart / form-data。

您需要使用request.form dict访问Flask中的表单数据。

Sendgrid的博客提供了一个教程:https://sendgrid.com/blog/collect-inbound-email-using-python-and-flask/

此外,当您进行更改时,您应该从headers={"Content-Type":"application/json"}来电中删除requests.post,以便将其作为表单数据发送。

答案 1 :(得分:0)

遇到了同样的问题,但要求我将其转换为字典。 Webhook现在像一个吊饰一样工作。我还建议您使用ngrok来测试端点,因为sendgrid要求您公开URL。

belongs_to