Хотя OP нашел решение в конце, так как у меня была такая же проблема, я решил, что разместил бы весь код здесь для других, которые могут с этим бороться.
Так вот как я объединил ng-file-upload
и nodemailer
загружать и отправлять вложения по электронной почте с помощью Gmail:
HTML формы:
<form name="postForm" ng-submit="postArt()">
...
<input type="file" ngf-select ng-model="picFile" name="file" ngf-max-size="20MB">
...
</form>
Контроллер:
app.controller('ArtCtrl', ['$scope', 'Upload', function ($scope, Upload) {
$scope.postArt = function() {
var file = $scope.picFile;
console.log(file);
file.upload = Upload.upload({
url: '/api/newart/',
data: {
username: $scope.username,
email: $scope.email,
comment: $scope.comment,
file: file
}
});
}
}]);
var nodemailer = require('nodemailer');
var multipartyMiddleware = require('connect-multiparty')();
// multiparty is required to be able to access req.body.files !
app.mailTransporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: ...
pass: ...
},
tls: { rejectUnauthorized: false } // needed or Gmail might block your mails
});
app.post('/api/newart', multipartyMiddleware,function(req,res){
console.log(req.files);
mailOptions = {
from: req.body.email,
to: ...,
subject: ...
text: ...,
attachments: [{
filename: req.files.file.name,
path: req.files.file.path // 'path' will stream from the corresponding path
}]
};
app.mailTransporter.sendMail(mailOptions, function(err) {
if (err) {
console.log(err);
res.status(500).end();
}
console.log('Mail sent successfully');
res.status(200).end()
});
});
nodemailer examples помогли мне понять это!
Это работает для любого типа файла. Ключевым аспектом, который могут пропустить некоторые люди, является то, что для доступа к загруженному файлу требуется многопартийность (в req.body.files
). Тогда наиболее удобным способом его присоединения является использование ключа path
в объекте вложения.
Сменили ли вы решение? – jerorx
Yeap. В моем случае я изменил данные файла на базу 64 и передал параметр привязки в nodemailer. Он работал хорошо. Пожалуйста, позвольте мне оставить сообщение, если вам нужно детальное решение. – supergentle