nodejs 从电子邮件发送附件作为 multipart/form-data 被 mailparser 解析

nodejs send attachments from email as multipart/form-data getting parsed by mailparser

我正在尝试解析电子邮件内容并发送电子邮件正文及其附件。我使用 mailparser 解析电子邮件内容,使用 request 库发送 multipart/form-data POST 请求。但是,我得到

TypeError: source.on is not a function

如果电子邮件包含任何附件,则会出错。

test.js

var simpleParser = require("mailparser").simpleParser;
var request = require('request');

var sendEmail = async (emailContent) => {
    try {
        var parsedEmail = await simpleParser(emailContent);
    } catch(e) {
        return console.error(e);
    }

    var data = {
        'ticketId': parsedEmail.subject.split('Ticket No ')[1],
        'message': parsedEmail.text,
        'msgFrom': 'C',
    };

    var formData = {
        createMessageRequest: JSON.stringify(data),
        attachments: parsedEmail.attachments,
    }

    try {
        request.post({url: 'http://localhost:8085/tickets', formData: formData},
            function callback(err, res, body) {
                if (err) {
                    return console.error('upload failed: ', err);
                }

                console.log('Upload successful!  Server responded with:', body);
                return;
            }
        );
    } catch(err) {
        console.log(err);
    }

}

mailparser 的 attachments 属性包含一个缓冲区,其内容在其 contents 属性中。因此,我尝试只获取内容并将它们也作为缓冲区对象发送,但没有成功。这是您可以看到来自 mailparser

的附件定义

感谢您的帮助!

我需要从每个附件的 content 创建一个缓冲区对象。 Attachments 在 mailparser 中有一个名为 content 的属性,它是一个用于保存内容的缓冲区。

    var formData = {
        createMessageRequest: JSON.stringify(data),
        files: []
    }

    if (parsedEmail.attachments) {
        for (ind = 0; ind < parsedEmail.attachments.length; ind++) {
            formData.files.push({
                value: Buffer.from(parsedEmail.attachments[ind].content),
                options: {
                    filename: parsedEmail.attachments[ind].filename,
                    contentType: parsedEmail.attachments[ind].contentType
                }
            });
        }
    }