Читать вложения из электронных писем, хранящихся в Amazon S3

Пожалуйста, кто-нибудь, помогите мне..

Я сохранил электронные письма в S3 в необработанном формате (эти электронные письма хранятся в S3, вызванном триггером от SES). Затем, когда эти объекты сохраняются в S3, другой триггер вызывает лямбду. Это нормально работает. Итак, эти электронные письма имеют вложение.. А теперь я хочу, чтобы эти вложения были сохранены в другом хранилище S3. Моя лямбда-нота находится в nodejs. Есть предложения о том, как я могу прочитать это вложение и сохранить в другом ведре?

Я пытаюсь что-то вроде этого:

s3.getObject({
Bucket: src_bkt,
Key: src_key
}, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(err);
        } else {
            console.log('data')
            console.log(data)
            console.log("Raw text:\n" + data.Body.toString('ascii'));
            callback(null, null);
        }
    });   

Таким образом, в переменной data у меня есть документ S3. Если я делаю data.body.toString('ascii'), я получаю много информации об электронной почте. Включая это:

From: ************** <************@gmail.com>
Date: Thu, 26 Apr 2018 12:52:51 +0000
Message-ID: <CAHj39+X87rSiuXoDatbKQeOM5izANYmQPh7Mw3zjrZe15guAkQ@mail.gmail.com>
Subject: teste
To: "**********@****.in" <**********@****.in>
Content-Type: multipart/mixed; boundary="000000000000291211056abfdea3"

--000000000000291211056abfdea3
Content-Type: multipart/alternative; boundary="00000000000029120e056abfdea1"

--00000000000029120e056abfdea1
Content-Type: text/plain; charset="UTF-8"

teste com anexo

--00000000000029120e056abfdea1
Content-Type: text/html; charset="UTF-8"

<div dir="ltr">teste com anexo</div>

--00000000000029120e056abfdea1--
--000000000000291211056abfdea3
Content-Type: application/octet-stream; name="K9A02AK.LPR"
Content-Disposition: attachment; filename="K9A02AK.LPR"
Content-Transfer-Encoding: base64
Content-ID: <163020361c0eb0cadbf1>
X-Attachment-Id: 163020361c0eb0cadbf1

TFBSMDAwMDEwICAgIFQgTEVUICAgICAgICAxIDI2MSA2NzMgICAwICAgMCAgIDEgICAwICAgMCAg
IDAgNzM3ICA3MzEgICAuICAwICAgMCAgIDAgICAwICAgMCAxMDANCiN/QQ0KIy8xLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgQSAgIEcgICBEICAgLSAgIFIgICAtICAgVCAgIC0gICBaIFJFTEUg
RVguICBfICAgXyAgIF8gICBfICAgXyBDTEkNCkxQUiBmIDAwMDAgMjAxODA0MjYwOTEyNTQgTEVU
TklTU0FQIEFQU2VydmljZUxQUg0KTFBSIGUgMDAwNCAyMDE4MDQyNjA5MTI1OCBMRVROSVNTQVAg
QVBTZXJ2aWNlTFBSDQpMRVQgPCAwMDAwIDIwMTgwNDI2MDkxMzE4IExFVE5JU1NBUCBBUFNlcnZp
Y2VMUFINCkxQUiBFIDAwMDQgMjAxODA0MjYwOTEzMTkgTEVUTklTU0FQIEFQU2VydmljZUxQUg0K
--000000000000291211056abfdea3--

Благодарю.

1 ответ

Решение

Это работает сейчас.. Если кому-то нужно сделать то же самое:

Используйте mailparser lib:

const simpleParser = require('mailparser').simpleParser;
            simpleParser(data.Body, (err, mail)=>{
                if(err){
                    console.log(err)
                    callback(null, null);
                }else{
                    console.log(mail)
                    console.log(mail.attachments[0])
                    console.log(mail.attachments[0].content)
                    console.log(mail.attachments[0].content.toString('ascii'))
                    callback(null, null);
                }
            })
Другие вопросы по тегам