Мой код для отправки почтового сообщения с несколькими файлами в виде вложения с использованием отправителя узла js работал до добавления индикатора выполнения, а для индикатора выполнения я использую progress-stream .Он показывает индикатор выполнения, но получатель получает только один поврежденный файл.
Мой код здесь
function mail() {
getSelected(); // this function store addresses of all the files in checked array
att = [];
var nodemailer = require('nodemailer');
var fs = require('fs');
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: document.getElementById("from").value,
pass: document.getElementById("ps").value
}
});
for (var i = 0; i < checked.length; i++) { //measuring total size of files
attSize += fs.statSync(checked[i])["size"];
}
var progress = require('progress-stream');
var str = progress({
length: attSize,
time: 100 /* ms */
});
for (var i = 0; i < checked.length; i++) { //adding all src/path of selected files in att
attSize += fs.statSync(path)["size"];
att.push({
filename: filename,
content: fs.createReadStream(path).pipe(str)
});
}
str.on('progress', function(progress) {
if (progress.length == 100) {
toast("Sending Email!", 500);
} else {
showToast('Uploading Attachment :' + progress.length + ' %');
}
});
var mailOptions = {
from: document.getElementById("from"),
to: document.getElementById("to").value,
subject: 'Custom Subject',
text: 'This is simple text ... That was easy!',
attachments: att
};
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
toast(error, 2000);
} else {
toast('Email sent: ' + info.response, 2000);
}
});
}
Я думаю, что проблема здесь
content: fs.createReadStream(path).pipe(str)
Итак, если я использую .pipe(str)
в нескольких файлах, индикатор выполнения работает, но изображения вложений повреждены и вместо нескольких файлов получатель получает только один файл