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

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

我遇到的问题是Mailgun发送的POST不是以JSON而是以multipart / form-data的形式发送。我无法找到一种方法来解析此内容类型并获取电子邮件html。这是来自Mailgun的sample转发的电子邮件(请注意,从技术上讲,mailgun也会发送附件,但我关心的只是stripped-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请求?这有可能吗?

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

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

本文链接:https://www.f2er.com/3052704.html

大家都在问