2016-03-30 7 views
3

Я пытаюсь отправить электронное письмо с помощью 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' }

+0

изменить это 'из: 'Пряный Meatball <[email protected]>',' to 'from: '' Spicy Meatball" <[email protected]> ', здесь проблема с адресом отправителя – Ankanna

+0

не работает. Ошибка обработчика на 'template.render (locals, function (err, results) {' – ennet

+0

удаляет расширение '.jade' в формате from hello.jade, это должно быть просто имя, подобное этому' path.join (templatesDir, hello ') и ваше значение 'templatesDir' должно заканчиваться на'/'иначе проблемы с URL-адресами не возникают ' – Ankanna

ответ

0

Я думаю шаблон рендеринга вопрос, и вы должны return что-то из function (err, responseStatus){} для success

Здесь я предполагаю, в templates папку и templates папку hello.jade в root directory и обеспечить jade используется в качестве шаблона двигателя

может попробовать это

var EmailTemplate = require('email-templates').EmailTemplate; 
var path = require('path'); 

var templateDir = path.join(__dirname, 'templates', 'hello'); 

var myTemplate = new EmailTemplate(templateDir); 
var locals = { 
     email: '[email protected]', 
     name: { 
      first: 'Mamma', 
      last: 'Mia' 
     } 
} 
myTemplate .render(locals , function (err, result) { 
    // result.html 
    // result.text 
    if (err) { 
     return console.error(err) 
    } 
    // check here what is showing in your result 
    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) 
     return responseStatus;// return from status or as you need; 
    }) 
}) 

Обновлено: Насколько я предполагаю, что это не nodemailer смежный вопрос это может быть template проблема рендеринга. может проверить на directory или на html странице.

+0

нет, это не помогло. error 'обещание было отклонено с ошибкой: [object Undefined]' – ennet

+0

может попробовать обновленный ответ @ennet –

+0

i обновил мой код https: // jsfiddle.net/gb7jLjjx/1 /, но у меня все еще есть ошибка '{[Ошибка: ENOENT: нет такого файла или каталога, stat '/ path-to-my-project/templates/hello' '] errno: -2, Код: 'ENOENT', syscall: 'stat', путь: '/ path-to-my-project/templates/hello'} '@shaishab roy – ennet

Смежные вопросы