Existe-t-il un moyen de télécharger plusieurs pièces jointes vers Sendgrid avec Nodemailer/Express/Multer? Je suis en mesure d'envoyer un seul fichier, mais les tests approfondis avec un tableau de pièces jointes a échoué.Téléchargement de plusieurs fichiers avec nodemailer/sendgrid
C'est ma fonction de contrôleur où je soumets les fichiers:
$scope.submitEmail = function(email) {
var formData = new FormData();
$scope.email.to = $scope.email_employer;
formData.append('from', $scope.email.from);
formData.append('to', $scope.email.to);
formData.append('subject', $scope.email.subject);
formData.append('text', $scope.email.text);
var fileSelect = document.getElementById('file-select');
var files = fileSelect.files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
// Add the file to the request.
formData.append('attachment', file, file.name);
}
/*
Object.keys($scope.email).forEach(function(key) {
formData.append(key, $scope.email[key]);
});
*/
$http.post('/api/email', formData, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then(function(data, status) {
console.log("Sent ok");
}, function(data, status) {
//here we have to add an error message e.g. "We could not send the form at this moment. Try again later"
console.log(data);
});
};
Ceci est mon app.js où je tente d'envoyer le fichier à SendGrid
// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var express = require('express');
var config = require('./config/environment');
var http = require('http');
var bodyParser = require('body-parser');
var multer = require('multer');
var upload = multer({ dest: './uploads/' });
//var upload = multer();
var nodemailer = require('nodemailer');
var sgTransport = require('nodemailer-sendgrid-transport');
var options = {
auth: {
api_user: '##########',
api_key: '###########'
}
}
var mailer = nodemailer.createTransport(sgTransport(options));
// Setup server
var app = express();
var server = require('http').createServer(app);
require('./config/express')(app);
require('./routes')(app);
app.post('/api/email', upload.array('attachment', 4), function(req, res, next) {
console.log(req.file);
var mailOptions = {
to: req.body.to,
from: req.body.from,
subject: req.body.subject,
text: req.body.text,
attachments: [
{
filename: req.file.originalname,
path: req.file.path
}
]
};
mailer.sendMail(mailOptions, function(err, res) {
if (err) {
console.log(err);
}
console.log(res);
});
});
// Start server
server.listen(config.port, config.ip, function() {
console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});
// Expose app
exports = module.exports = app;
L'erreur suivante est représenté:
TypeError: Cannot read property 'originalname' of undefined
at /Applications/MAMP/htdocs/myproject/server/app.js:51:35
at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/myproject/node_modules/express/lib/router/layer.js:82:5)
at next (/Applications/MAMP/htdocs/myproject/node_modules/express/lib/router/route.js:100:13)
at done (/Applications/MAMP/htdocs/myproject/node_modules/multer/lib/make-middleware.js:36:7)
at indicateDone (/Applications/MAMP/htdocs/myproject/node_modules/multer/lib/make-middleware.js:40:51)
at /Applications/MAMP/htdocs/myproject/node_modules/multer/lib/make-middleware.js:142:11
at WriteStream.<anonymous> (/Applications/MAMP/htdocs/myproject/node_modules/multer/storage/disk.js:43:9)
at emitNone (events.js:72:20)
at WriteStream.emit (events.js:166:7)
at finishMaybe (_stream_writable.js:468:14)
coller votre code où vous utilisez upload.array ('attachement'). Ecrivez aussi ce qui a échoué lorsque vous testez plusieurs pièces jointes. s'il y a des erreurs dans la console, écrivez-les aussi. –
J'ai mis à jour mon code. J'espère que c'est clair. Faites-moi savoir si vous avez besoin de plus d'informations –