Я пытаюсь отправить электронное письмо с помощью вызова API (Swagger) из пакета NodeMailer (версия 2.7.2).С функциональной точки зрения все в основном работает нормально, то есть электронная почта доставляется как положено.
Единственное, я не получаю ответ, который работает для контроллера Swagger, который вызывает пакет nodemailerКоманда sendEmail.
Вот код для функции nodeMailer.Это работает (отправляет электронное письмо) и выводит следующие на консоль :
Попытка отправить почту: ["someemail@gmail.com"]250 2.0.0 OK 1550718405 w10sm28574425pge.8 - gsmtp
'use strict';
const fs = require('fs');
var nodemailer = require('nodemailer');
var emailConfig = require('../configs/email.json');
/**
* @since AlphaRC7
* @desc Config is loaded for nodemailer via emailConfig.json,
* for more information: see https://nodemailer.com/smtp/
* @param emails is a comma separated string sent from the controller processing things before hand
*
* @since AlphaRC8
* @param shareUrl is a string GUID
*/
exports.sendEmail = function (shareUrl, emails, pdfContent) {
return new Promise(function (req, resolve) {
var transporter = nodemailer.createTransport(emailConfig);
console.log(pdfContent.buffer);
// setup e-mail data with unicode symbols
var mailOptions = {
from: emailConfig.fromSenderEmail, // sender email address
to: emails, // list of receivers
subject: 'Your colleague shared a report with you!',
text: 'Hey there! Your colleague wants to collaborate with you! <br />' +
'Check here to visit: ' + shareUrl, // plaintext body'
html: 'Hey there! Your colleague wants to collaborate with you! <p>' +
'<b>Click here to visit: </b> <a href=' + shareUrl + '>' + shareUrl + '</a></p>',
attachments:[{
filename: 'report.pdf',
content: new Buffer(pdfContent.buffer, 'binary')
}]
};
console.log("Attempting to send mail to:");
console.log(emails);
return transporter.sendMail(mailOptions).then(function(info) {
console.log(info.response);
}).catch(function(err) {
console.log(err);
});
});
}
Однако Swagger никогда не получает ответ в info.response от обратного вызова sendMails.Вот контроллер Swagger, который вызывает функцию sendEmail:
'use strict';
var utils = require('../utils/writer.js');
var email = require('../impl/EmailService.js');
var fs = require('fs');
/**
* This function simply instantiates the entry, so we don't need to pass
* it anything, just have an agreement on the security side.
*/
module.exports.sendEmail = function sendEmail (req, res, next) {
var shareUrl = req.swagger.params.shareUrl.value;
var emails = req.swagger.params.emails.value;
var pdfBlob = req.swagger.params.myblob.value;
email.sendEmail(shareUrl, emails, pdfBlob)
.then(function (response) {
console.log(response);
res.send(response);
utils.writeJson(res, response);
})
.catch(function (response) {
console.log(response);
res.send(response);
utils.writeJson(res, response);
});
};
Функция ".then" от контроллера никогда не достигается, поэтому Swagger просто останавливается и никогда не получает ответ (просто застревает при загрузке):
Пожалуйста, дайте мне знать, что мне нужно сделать, чтобы правильно вернуть результат обратного вызова NodeMailer в функцию, вызываемую из контроллера Swagger.Я попытался вернуть реальную функцию sendMail, а также функцию response.info, и ни один из них не вызывает код в функции .then () контроллера Swagger.