python - Sendgrid 入站 Webhook 数据在 Flask 中完全空白,但适用于从请求发送的请求?

标签 python flask sendgrid

我现在有一个 Heroku Flask 应用程序。当它收到 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 发布时:

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

我的个人电子邮箱收到一封电子邮件,其中包含“数据在此:{"some":"data"}"

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

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

最佳答案

根据docs :

The request that will be sent to the HTTP endpoint will be encoded as multipart/form-data.

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

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

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

关于python - Sendgrid 入站 Webhook 数据在 Flask 中完全空白,但适用于从请求发送的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34537500/

相关文章:

python - 无法从 Ubuntu 16.04 卸载 anaconda

python - 具有多个参数的复杂排序?

python - 无法使用 Supervisord 启动 Python 应用程序

node.js - 403 禁止在 Node.js 中使用 sendgrid 发送电子邮件

html - Apple Mail 上的 SendGrid 电子邮件中的按钮链接不起作用

ruby-on-rails - 如何从电子邮件服务器获取 Rails 应用程序上的电子邮件回复

python - 编辑 DataFrame 中的值

python - 错误 UnicodeDecodeError : 'utf-8' codec can't decode byte 0xbe in position 2: invalid start byte

python - PyCharm 为 Flask 应用启动 Django 控制台

python - 如何创建一个 mysql 连接池或任何更好的方法来初始化多个数据库?