amazon-web-services - 如何在 AWS Lambda 上解析 Mailgun API 转发的多部分/表单数据?
问题描述
这是我想要实现的目标:用户可以通过与 Mailgun 服务集成的 test@myDomain.com 向我发送电子邮件。根据我设置的规则,Mailgun 会将这封电子邮件作为 POST 请求转发到 https:url-to-my-lambda-function.amazonaws.com/email。然后我在 Lambda 中收到这个 POST 请求,解析它,然后从电子邮件中获取并使用 html 进行进一步的工作。
我遇到的问题是 Mailgun 不是以 JSON 形式发送他们的 POST,而是以 multipart/form-data 的形式发送。我一直无法找到解析此内容类型并获取电子邮件 html 的方法。这是来自 Mailgun 的转发电子邮件示例(请注意,从技术上讲,mailgun 也会发送附件,但我只关心剥离的 html 字段)。
另请注意,我正在使用无服务器框架,需要在 Python 或 Node.js 中编写此函数。
我试图做的事情来解析 POST 请求:
- 尝试使用parse-multipart npm 库,但我认为无法让它工作,因为我找不到边界字符串。这可能仍然是一个可行的解决方案。
- 尝试
let body = new String(decodeURIComponent(event.body));
将数据放入字符串并对其进行解码,因为它似乎是以 URL 编码的形式出现的。然后我使用正则表达式来查找并提取我想要的剥离的 html。但是,我认为 URL 解码无法正常工作,因为它将空格转换为加号。请参阅下面的块作为我得到的示例:
<td+align="center"+valign="top"+id="m_-6910385412628668961m_-3845437051063103019m_-3682438291175620773bodyCell"+style="padding-bottom:40px;height:100%;margin:0;padding:0;width:100%;border-top:0">\n++++++++++++++++++++++++\n++++++++++++++++++++++++<table+border="0"+cellpadding="0"+cellspacing="0"+width="100%"+style="border-collapse:collapse">\n++++++++++++++++++++++++++++<tbody><tr>\n++++++++++++++++++++++++++++++++<td+align="center"+valign="top">\n++++++++++++++++++++++++++++++++++++\n++++++++++++++++++++++++++++++++++++<table+border="0"+cellpadding="0"+cellspacing="0"+width="100%"+id="m_-6910385412628668961m_-3845437051063103019m_-3682438291175620773templatePreheader"+style="border-collapse:collapse;background-color:#eaeaea;border-top:0;border-bottom:1px+solid+#d0d0d0">\n++++++++++++++++++++++++++++++++++++++++<tbody><tr>\n++++++++++++++++++++++++++++++++++++++++\t<td+align="center"+valign="top">\n++++++++++++++++++++++++++++++++++++++++++++++++<table+border="0"+cellpadding="0"+cellspacing="0"+width="600"+style="border-collapse:collapse">
- 我也尝试过使用busboy之类的库来解码 multipart/form-data,但在让它们在 Lambda 中工作时遇到了问题,因为它们是根据请求工作的。
如何解析这个 POST 请求?这甚至可能吗?
解决方案
您可能应该考虑使用旨在解析多部分表单数据的模块,例如https://www.npmjs.com/package/parse-formdata。
推荐阅读
- javascript - 如何在单选按钮单击时在 React js 中映射数据?
- reactjs - 反应动画离开 div 内容
- python - 使用字典查找获得最高百分比的学生的姓名
- powershell - Powershell远程安装exe文件但它永远不会完成
- javascript - 我的第一个代码不起作用,但我的第二个代码起作用。第一个有什么问题?
- sql - 收藏中最昂贵的电影的成本是多少?
- php - 无法在 laravel 5.4 中显示数据 php 调试栏
- java - 为什么我无法将此值从这个方法传递给 Android Studio 中的这个其他方法?
- z3 - 舍入浮点数比较问题
- nuxt.js - 覆盖默认的 vue-formulate snow.scss 主题