如何使用 mailparser npm 模块解析 node.js 中的电子邮件附件?
How to parse email attachments in node.js using mailparser npm module?
我正在使用 mailparser npm 模块、打字稿和节点 14。
我正在阅读一条消息并尝试解析附件。
这封电子邮件有一个文件附件,它是一个 csv 文件,至少看起来是这样。
所以在代码中,我有以下内容:
const MailParser = require('mailparser').MailParser;
在我处理正确电子邮件的地方,我有
const parser = new MailParser();
parser.on('headers', headers => {
console.log(headers.get('subject'));
});
parser.on('data', data => {
if (data.type === 'attachment') {
console.log(data.filename);
console.log(data.contentType);
data.content.pipe(process.stdout);
data.content.on('end', () => data.release());
}
});
我看到的是下面的输出,我截断了一些控制字符:
Outlook-dxbeseix.png
image/png
�PNG
IHDR�SLs IDATx�wtW�-z�zo���[��߽?ۀ ��y���4Nc�gl�x<cόA�Ev�1��8�4��d����[�d���������A��~k�%5
....
�)IEND�B`�2020-8-24-20-4-24 (1).csv
application/vnd.ms-excel
IMEI,Result
353071093175234,UNPAID
356759089843552,UNLOCKED
358709098168945,UNLOCKED
所以我看到一个以实际附加文件结尾的 png 流。
有人可以解释这里发生了什么吗?
以及如何在此缓冲区中找到 csv 文件附件内容以便我对其进行解析?
当使用 MailParser
时 class content
不是缓冲区而是 Stream.
我添加了一些代码注释
parser.on('data', data => {
if (data.type === 'attachment') {
// prints the file name of the attachment
console.log(data.filename);
// prints the contentType of the attachment
console.log(data.contentType);
// Content is a stream which is piped to stdout
data.content.pipe(process.stdout);
// call release after attachment processing to continue
// message processing. Message processing will be paused
// until release is called
data.content.on('end', () => data.release());
}
});
how to find the csv file attachment content
您可以使用 data.contentType
获取 csv 附件流,如下所示
// RFC 7111 and MS Excel types
const csvContentTypes = ['text/csv','application/vnd.ms-excel'];
parser.on('data', data => {
if (data.type === 'attachment') {
if(csvContentTypes.includes(data.contentType)) {
// stream to a file, s3 etc
// call release
data.content.on('end', () => data.release());
} else {
// skip the attachment
data.release();
}
}
});
我正在使用 mailparser npm 模块、打字稿和节点 14。 我正在阅读一条消息并尝试解析附件。 这封电子邮件有一个文件附件,它是一个 csv 文件,至少看起来是这样。
所以在代码中,我有以下内容:
const MailParser = require('mailparser').MailParser;
在我处理正确电子邮件的地方,我有
const parser = new MailParser();
parser.on('headers', headers => {
console.log(headers.get('subject'));
});
parser.on('data', data => {
if (data.type === 'attachment') {
console.log(data.filename);
console.log(data.contentType);
data.content.pipe(process.stdout);
data.content.on('end', () => data.release());
}
});
我看到的是下面的输出,我截断了一些控制字符:
Outlook-dxbeseix.png
image/png
�PNG
IHDR�SLs IDATx�wtW�-z�zo���[��߽?ۀ ��y���4Nc�gl�x<cόA�Ev�1��8�4��d����[�d���������A��~k�%5
....
�)IEND�B`�2020-8-24-20-4-24 (1).csv
application/vnd.ms-excel
IMEI,Result
353071093175234,UNPAID
356759089843552,UNLOCKED
358709098168945,UNLOCKED
所以我看到一个以实际附加文件结尾的 png 流。 有人可以解释这里发生了什么吗? 以及如何在此缓冲区中找到 csv 文件附件内容以便我对其进行解析?
当使用 MailParser
时 class content
不是缓冲区而是 Stream.
我添加了一些代码注释
parser.on('data', data => {
if (data.type === 'attachment') {
// prints the file name of the attachment
console.log(data.filename);
// prints the contentType of the attachment
console.log(data.contentType);
// Content is a stream which is piped to stdout
data.content.pipe(process.stdout);
// call release after attachment processing to continue
// message processing. Message processing will be paused
// until release is called
data.content.on('end', () => data.release());
}
});
how to find the csv file attachment content
您可以使用 data.contentType
获取 csv 附件流,如下所示
// RFC 7111 and MS Excel types
const csvContentTypes = ['text/csv','application/vnd.ms-excel'];
parser.on('data', data => {
if (data.type === 'attachment') {
if(csvContentTypes.includes(data.contentType)) {
// stream to a file, s3 etc
// call release
data.content.on('end', () => data.release());
} else {
// skip the attachment
data.release();
}
}
});