Я пытаюсь отправить электронное письмо с помощью nodemailer и шаблонов электронной почты. Теперь у меня есть пример отсюда example email templates. Но когда я проверяю этот код, у меня есть ошибка a promise was rejected with a non-error: [object Undefined]
Как отправить сообщение с помощью nodemailer и шаблонов электронной почты?
Помогите мне пожалуйста. Это мой код
var nodemailer = require('nodemailer');
var EmailTemplate = require('email-templates').EmailTemplate;
exports.sendOne = function() {
var templatesDir = config.templatesDir;
var template = new EmailTemplate(path.join(templatesDir, 'hello.jade'))
var transport = nodemailer.createTransport({
service: config.service,
auth: config.auth
});
// An example users object with formatted email function
var locals = {
email: '[email protected]',
name: {
first: 'Mamma',
last: 'Mia'
}
}
// Send a single email
template.render(locals, function (err, results) {
if (err) {
return console.error(err)
}
transport.sendMail({
from: 'Spicy Meatball <[email protected]>',
to: locals.email,
subject: 'Mangia gli spaghetti con polpette!',
html: results.html,
text: results.text
}, function (err, responseStatus) {
if (err) {
return console.error(err)
}
console.log(responseStatus.message)
})
})
}
Моя ошибка:
Warning: a promise was rejected with a non-error: [object Undefined]
at /home/project/node_modules/email-templates/lib/util.js:31:39
at FSReqWrap.oncomplete (fs.js:82:15)
From previous event: ...
Скажите, пожалуйста, как исправить эту ошибку? благодаря!
UPDATE Код
exports.sendOne = function() {
\t var nodemailer = require('nodemailer');
\t var transport = nodemailer.createTransport({
\t \t service: 'gmail',
\t auth : {
\t \t user: '[email protected]',
\t \t pass: '123456'
\t }
\t });
\t var EmailTemplate = require('email-templates').EmailTemplate;
\t var path = require('path');
\t var templateDir = path.join(__dirname, 'templates','hello');
\t var myTemplate = new EmailTemplate(templateDir);
\t var locals = {
\t \t email: '[email protected]',
\t \t name: {
\t \t \t first: 'Mamma',
\t \t \t last: 'Mia'
\t \t }
\t };
\t myTemplate.render(locals , function (err, result) {
\t \t // result.html
\t \t // result.text
\t \t if (err) {
\t \t \t return console.error(err)
\t \t }
\t \t transport.sendMail({
\t \t \t from: 'Spicy Meatball <[email protected]>',
\t \t \t to: locals.email,
\t \t \t subject: 'Mangia gli spaghetti con polpette!',
\t \t \t html: results.html,
\t \t \t text: results.text
\t \t }, function (err, responseStatus) {
\t \t \t if (err) {
\t \t \t \t return console.error(err)
\t \t \t }
\t \t \t console.log(responseStatus.message)
\t \t \t return responseStatus;// return from status or as you need;
\t \t })
\t })
};
Я обновил свой код, но теперь у меня есть ошибка { [Error: ENOENT: no such file or directory, stat '/path-to-my-project/templates/hello''] errno: -2, code: 'ENOENT', syscall: 'stat', path: '/path-to-my-project/templates/hello' }
изменить это 'из: 'Пряный Meatball <[email protected]>',' to 'from: '' Spicy Meatball" <[email protected]> ', здесь проблема с адресом отправителя – Ankanna
не работает. Ошибка обработчика на 'template.render (locals, function (err, results) {' – ennet
удаляет расширение '.jade' в формате from hello.jade, это должно быть просто имя, подобное этому' path.join (templatesDir, hello ') и ваше значение 'templatesDir' должно заканчиваться на'/'иначе проблемы с URL-адресами не возникают ' – Ankanna