Как связать progress-streamer с node-mailer для нескольких вложений? - PullRequest
0 голосов
/ 02 марта 2019

Мой код для отправки почтового сообщения с несколькими файлами в виде вложения с использованием отправителя узла 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) в нескольких файлах, индикатор выполнения работает, но изображения вложений повреждены и вместо нескольких файлов получатель получает только один файл

...