2016-07-07 32 views
0

我遵循this stackoverflow指导将文件附加到表单。但不断得到一个内部错误500和错误400.我找不到任何类似任务的教程。如果你能陪我,我会非常感激!将文件附加到带有Nodemailer和Angular的表单

Server.js

var mailOptions = { 
    from: data.contactFrom, // sender address 
    contactEmail: data.contactEmail, 
    to: '[email protected]', // 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); 
}); 

Client.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 = {}; 
    } 

}]);

什么是可能的错误和任何改善让生活更轻松?

+0

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

回答

0

这里什么工作形式我。我使用FormData包括输入文件和req.body值。

Server.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){...}); 

Client.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; 
     });