【问题标题】:Attach file to the Form with Nodemailer and Angular使用 Nodemailer 和 Angular 将文件附加到表单
【发布时间】:2016-11-09 14:59:25
【问题描述】:

我按照this stackoverflow 的指导将文件附加到表单中。但是不断收到内部错误 500 和错误 400。我找不到任何具有类似任务的教程。如果你能陪我,我将不胜感激!

服务器.js

var mailOptions = {
   from: data.contactFrom, // sender address
   contactEmail: data.contactEmail,
   to: 'somebody@gmail.com', // list of receivers
   subject: "Request for a Quote from " + data.contactName, // Subject line
   contactMsg: data.contactMsg, // plaintext body
  attachments: [{ filename: req.file.originalname, content: req.file.buffer]};

console.log(mailOptions)

// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
    if(error){ return console.log(error); }
    console.log('Message sent: ' + info.response);
    res.json(info);
});

客户端.js

app.controller('QuoteCtrl', ['$scope','$http', 
function($scope, $http) {

    $scope.message = {};
   $scope.sendMail = function () {

    // //Include the file in AJAX request
    var formData = new FormData();
       Object.keys($scope.message).forEach(function(key) {
          formData.append(key, $scope.message[key]);
       });

      $http.post('/send/sendQuote', formData, $scope.message, {
    transformRequest: angular.identity, headers: {'Content-Type': undefined}}).
        success(function(data) {
         $scope.message = data;
      });

    $scope.message = {};
   }

}]);

有哪些可能的错误和任何改进以使生活更轻松?

【问题讨论】:

  • 我使用了不同的版本来发送电子邮件。我猜你正在使用 Nodemailer 包。我使用了 Nodemailer 的 sendgrid 插件:npmjs.com/package/nodemailer-sendgrid-transport。这就是为什么我的代码与你的不同。如果您使用的是 Sendgrid,我建议您切换到该版本(如果它仍然受支持)。我认为您的服务器无法发布表单,因为错误导致 500 错误。

标签: angularjs express attachment nodemailer


【解决方案1】:

这对我有用。我使用了 FormData,包括输入文件和 req.body 值。

服务器.js

router.post('/send', upload.array('attachment', 4), 
function(req, res, next) {

    //attaching files
    var attachementList = [];
    for (var i = 0; i < req.files.length; i++) {
        attachementList.push({
            filename: req.files[i].originalname,
            path: req.files[i].path
        });
    }

    var mailOption = {...}


transporter.sendMail(mailOptions, function(error, info){...});

客户端.js

var formData = new FormData();

    //select input file
    var fileSelect = document.getElementById('file-select');
    var files = fileSelect.files;
    for(var i =0; i<files.length; i++) {
        var file = files[i];

        formData.append('attachment', file, file.name);
    }
    formData.append('bday', $scope.application.bday);

    $http.post('/send/sendVoice', formData, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        }, $scope.application).
                success(function(data) {
           $scope.application = data;
      });

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 2015-11-28
    • 2022-01-16
    • 2018-11-27
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2015-12-20
    相关资源
    最近更新 更多