【发布时间】:2016-07-18 15:22:38
【问题描述】:
我尝试使用 nodemailer 和电子邮件模板发送电子邮件。现在我有来自这里example email templates 的示例。但是当我检查这段代码时,我有错误a promise was rejected with a non-error: [object Undefined]
请帮帮我。这是我的代码
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: 'example@mail.com',
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 <spicy.meatball@spaghetti.com>',
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: ...
请告诉我如何解决这个错误?谢谢!
更新代码
exports.sendOne = function () {
var nodemailer = require("nodemailer");
var transport = nodemailer.createTransport({
service: "gmail",
auth: {
user: "test@gmail.com",
pass: "123456",
},
});
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: "example@mail.com",
name: {
first: "Mamma",
last: "Mia",
},
};
myTemplate.render(locals, function (err, result) {
// result.html
// result.text
if (err) {
return console.error(err);
}
transport.sendMail(
{
from: "Spicy Meatball <spicy.meatball@spaghetti.com>",
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;
}
);
});
};
我更新了我的代码,但现在出现错误{ [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' }
【问题讨论】:
-
把这个
from: 'Spicy Meatball <spicy.meatball@spaghetti.com>',改成from: ' "Spicy Meatball" <spicy.meatball@spaghetti.com>',这里是发件人地址的问题 -
它不工作。处理程序在
template.render(locals, function (err, results) {上显示错误 -
从
hello.jade中删除扩展名.jade,它应该是这样的名称path.join(templatesDir, 'hello') and yourtemplatesDir`值应该以/结尾,否则找不到url问题` -
var path = require('path')在路径变量用法上方添加这一行 -
还是不行,错误
Warning: a promise was rejected with a non-error: [object Undefined]
标签: javascript node.js promise