Parsing multipart/form-data from SendGrid inbound mail parse
When the email hits SendGrid, they send over a multipart/form-data that is separated by boundaries to an end point that I set up in Xano. How do I parse this request body into a useful object that I can use to extract the information I need (Title, body text, sender, date, raw attachment resource portion to be constructed back into the original file format, attachment name, attachment mime type, size, etc etc).
Appreciate your insights! I have posted the request body from SendGrid below:
--xYzZY
Content-Disposition: form-data; name='headers'
Received: by mx0063p1iad2.sendgrid.net with SMTP id 7fnlZANC8J Fri, 05 Aug 2022 02:07:24 +0000 (UTC)
Received: from mail-ej1-f45.google.com (unknown [209.85.218.45]) by mx0063p1iad2.sendgrid.net (Postfix) with ESMTPS id 68C558212E7 for ; Fri, 5 Aug 2022 02:07:24 +0000 (UTC)
Received: by mail-ej1-f45.google.com with SMTP id i14so2521798ejg.6 for ; Thu, 04 Aug 2022 19:07:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=my.domain; s=google; h=to:subject:message-id:date:from:mime-version:from:to:cc; bh=d2dEfPESK+37xE8I0wSBTV2WkV1Vvbnj4B/wWnwRNrU=; b=dCMSSXEOib6ulzlIG4YSxMXa4HGD/TVqvR9iR1QI+BqxcSn28BxGumR44ZaMCf4Jj2 lnmvIdtF5bzUFtroJ55dpNeJsMkabOOC4Y1wxXuF6rEb/c2crbFp/fCTW1YaTTfBiGsZ 4w2Iwyi3QIXiQFSYN9LOg8Ghv5JF/7i5+yN7YqFrnZ10UabEP4AUNbg7RUGV9rm/Mfmy UCxepCx5RCnha60YTbA43RGYplgLnbSELCfTWaCFOpobrTdSaPW+l3GNLCg/MWiVcLUP +zT7NbLH/rWN13iDyP2qd4viat4ZUGdEdQU68admdbgiqp5dcmZxM0HT0XY2sXahu2ED bomg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc; bh=d2dEfPESK+37xE8I0wSBTV2WkV1Vvbnj4B/wWnwRNrU=; b=44c6Uv8gZGRPQfLZ0I2gtuW0bLB/QR1FblG5RypUkO9cOCU47bgLtJuaFsuj4RIrq0 B8LvrWabrNFqFEr+EcxwLh15NmpMxodJkSsLvcZDdzZB4IVNZec1B9PkS2Kfl1ZueW4Z RDBp96H/Xq3yo+vt7nO7sp10ihH4sDsptITNZxXnD5KShUVl063K4aoaM8qhekTODy2h dtCc+2gJQzLC3SJwjoBnMdc2TzUwDUzO8BViZJnCTN/IL31YLOXOPHaoHalIlVwc6/i8 aLMEeL5TuvUVb8laiuK3YOiRlmRLQPAj7aIPjq5yPcmMllvgIKL5lR86DnYQqUQ3nsID arhw==
X-Gm-Message-State: ACgBeo3sTwwOPQtgx1QjJbdZcHKUn0g4ALgHIWFmn6kna7uaXyHZ4EKo JdDXnMFKlVJgpyVtYIsX7VbVkms9FTfpLl03a4UZEnn49OdPlNY5
X-Google-Smtp-Source: AA6agR7TWay/XpKzhxamDt6/7GeI5yYLMxwJXhwZB4hN0Toe7pzx6G+8+vXsXmMUXAmoAqbKR4jUQPWQcy9e4xT1IIU=
X-Received: by 2002:a17:907:2c4a:b0:730:87fe:2a88 with SMTP id hf10-20020a1709072c4a00b0073087fe2a88mr3467231ejc.313.1659665243115; Thu, 04 Aug 2022 19:07:23 -0700 (PDT)
MIME-Version: 1.0
From: Me
Date: Fri, 5 Aug 2022 10:07:11 +0800
Message-ID:
Subject: Test 2 Title
To: [email protected]
Content-Type: multipart/mixed; boundary='0000000000004342d505e574ed3e'
--xYzZY
Content-Disposition: form-data; name='attachment2'; filename='Test document 2.pdf'
Content-Type: application/pdf
%PDF-1.3
%�����������
3 0 obj
<< /Filter /FlateDecode /Length 173 >>
stream
x}�1�0����S�&�i���dU ܄�Y���С���iJ$C.��_�0�:�����őVT��I�B�
��B t=N7/ċ������/�G�L0�'���Vb)co
�JQ���$�m�BZ�P+�����ӳ�F)�_q������/�s^mc&x|���ǯ�����:�
endstream
endobj
1 0 obj
<< /Type /Page /Parent 2 0 R /Resources 4 0 R /Contents 3 0 R /MediaBox [0 0 595.2756 841.8898]
>>
endobj
4 0 obj
<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /TT2 7 0 R
>> >>
endobj
8 0 obj
<< /N 3 /Alternate /DeviceRGB /Length 2612 /Filter /FlateDecode >>
stream
x��wTS��Ͻ7��' %�z �;HQ�I�P��&vDF)VdT�G�'cE��b� �P��QDE�k ��5�ޚ��Y������g�}P���tX�4�X��� ���X��ffG�D���=���HƳ��.�d��,�P&s��⌂�'7C$
E�6<~&��S��2����)2�12� ��'�įl���+�ɘ�&��Y��4���Pޚ%ᣌ� �%�g�|e�TI���(����L0�_��&�l�2E�����9�r��9h�x�g���Ib�טi���f���S�b1+��M��xL����0��o�E%Ym�h�����Y��h����~S�=�z�U�&�ϞA��Y�l��/��$Z����U�m@���O� ��ޜ��l^���'���ls�k.+�7���oʿ�9�����V;�?�#I3eE妧�KD����d�����9i���,������UQ�� ��h��<�X�.d
�⌂��⌂6'~�khu_}�9P�I�o=C#$n?z}�[1
Ⱦ�h���s�2z��� �n�LA'S���dr%�,�߄l��t�
4�.0,`
�3p� ��H�.Hi@�A>�
A1�v�jpԁz�N�6p W�
p�G@
��K0ށi���A����B�ZyCAP8�C���@��&�*���CP=�#t�]���� 4�}���a
���ٰ;G���Dx����J�>����,�_@��FX�DB�X$!k�'��E�����H�q���a����Y��bVa�bJ0c�VL�6f3����bձ�X'�?v 6��-�V`�`[����a�;���p~� 2n5������
�&�x�*����s�b|!�
⌂⌂ߏƿ'� Zk�!� $l$T����4Q��Ot'�y� b)���A�I&N�I�$R$)���TIj']&=&�!��:dGrY@^O�$� _%�?P�(&OJEB�N9J�@y@yC�R
�n�X����ZO�D}J}/G�3����ɭ���k���{%O�חw�_.�'_!⌂J����Q�@�S���V�F���=�IE���b�b�b�b��5�Q%�����O�@���%�!BӥyҸ�M�:�e�0G7��ӓ������ e%e[�(�����R�0`�3R��������4������6�i^��)��*n*|�'�f����LUo�՝�m�O�0j&jaj�j��.��ϧ�w�ϝ_4����갺�z��j���=����U�4�5�n�ɚ���4ǴhZ�Z�Z��^0����Tf%��9�����-�>�ݫ=�c��Xg�N��]�.[7A� �SwBOK/X/_�Q��>Q�����G�[⌂��� �`�A�������a�a��c#����*�Z�;�8c�q��>�[&���I�I��MS���T`�ϴ�k�h&4�5�Ǣ��YY�F֠9�<�|�y��+=�X���_,�,S-�,Y)YXm������Ěk]c}džj�c�Φ�浭�-�v��};�]���N����'�&�1=�x����tv(��}���������'{'��I�ߝY�)�
Σ��-r�q��r�.d.�_xp��Uە�Z���M�v�m���=����+K�G�ǔ����^���W�W����b�j��>:>�>�>�v��}/�a��v���������O8� �
�FV>2 u�����/�_$ �B�Cv�< 5]�s.,4�&�y�Ux~xw-bEDCĻH����G��KwF�G�E�GME{E�EK�X,Y��F�Z� �={$vr����K����
��.3 ����r����Ϯ�_�Yq*���©�L��_�w�ד������+���]�e�������D��]�cI�II�OA��u�_��䩔���)3�ѩ�i�����B%a��+]3='�/�4�0C��i��U�@ёL(sYf����L�H�$�%�Y�j��gGe��Q������n�����~5f5wug�v����5�k��֮ ۹Nw]�������m mH���Fˍe�n���Q�Q��`h����B�BQ��-�[l�ll��f��jۗ'^��b����O%ܒ��Y}W�����������w�vw�����X�bY^�Ю�]��������W��Va[q`i�d��2���J�jGէ���������{�������m⌂���>