如何使用 Mandrill 和节点请求将文件(来自 url)附加到电子邮件

How to attach a file (from url) to email using Mandrill and node request

我有一个 URL 到 Excel 文件,我正试图将其作为附件添加到 Mandrill 发送的电子邮件中。 Mandrill 需要 base64 格式的附件内容:

我正在尝试获取 Excel 文件的内容,并将其添加到我的 Mandrill 消息中,但它不起作用。我需要使用native node request,因为我不能把一堆依赖添加到整个项目中。

我认为我的问题出在我的代码没有等待请​​求完成,因此数据变量在传递到我的消息对象时仍然为空。但是我对此很陌生,所以我想弄清楚是否有办法在这里使用“async/await”来确保我的消息对象在请求完成后获取数据。

关于我应该在此处更改什么的任何提示?

var https = require('https');

var data = '';
var request = https.request(myExcelFileURL, function (res) {
    res.on('data', function (chunk) {
        data += chunk;
    });
    res.on('end', function () {
        console.log(data);

    });
});
request.on('error', function (e) {
    console.log(e.message);
});
request.end();


// mandrill message
var message = {
   "html": msg,
   "subject": 'Test Excel Attachment',
   "from_email": from,
   "from_name": "Tester",
   "to": [{
          "email": email
    }],
    "headers": {
           "Reply-To": email
     },
    "attachments": [{
        "type": 'application/xlsx',
        "name": 'test.xlsx',
        "content": data.toString('base64') //this is coming up blank
     }],
};

获取 excel 文件的请求是异步的,但您没有等待它完成。您必须在请求的 end 处理程序中调用消息发送

var data = '';
var request = https.request(myExcelFileURL, function (res) {
    res.on('data', function (chunk) {
        data += chunk;
    });
    res.on('end', function () {
        console.log(data);
        sendmail(data);
    });
});
request.on('error', function (e) {
    console.log(e.message);
});
request.end();



function sendmail (data){
  var message = {
   "html": msg,
   "subject": 'Test Excel Attachment',
   "from_email": from,
   "from_name": "Tester",
   "to": [{
          "email": email
    }],
    "headers": {
           "Reply-To": email
     },
    "attachments": [{
        "type": 'application/xlsx',
        "name": 'test.xlsx',
        "content": data.toString('base64')
     }],
  };

  //send the message
}