如何解析由Mailgun API在AWS Lambda上转发的多部分/表单数据?

问题描述 投票:0回答:1

这是我想要实现的目标:用户可以通过与Mailgun服务集成的[email protected]向我发送电子邮件。根据规则,我将Mailgun设置为将这封电子邮件作为POST请求转发到https:url-to-my-lambda-function.amazonaws.com/email。然后,我在Lambda中收到此POST请求,将其解析,然后获取并使用电子邮件中的html进行进一步的工作。

我遇到的问题是Mailgun不是以JSON而是以multipart / form-data的形式发送其POST。我一直无法找到一种解析此内容类型并获取电子邮件html的方法。这是来自Mailgun的sample转发的电子邮件(请注意,从技术上讲,mailgun也会发送附件,但我关心的只是stripped-html字段)。

还请注意,我正在使用无服务器框架,需要用Python或Node.js编写此函数。

我试图解析POST请求的操作:

  • 尝试使用parse-multipart npm库,但我认为由于无法找到边界字符串而无法使其正常工作。这可能仍然是一个可行的解决方案。
  • Tried 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请求?这甚至可能吗?

amazon-web-services aws-lambda multipartform-data serverless-framework mailgun
1个回答
0
投票

您可能应该考虑使用设计为解析多部分表单数据的模块,例如https://www.npmjs.com/package/parse-formdata

© www.soinside.com 2019 - 2024. All rights reserved.