enn*_*net 6 javascript node.js promise
我尝试使用nodemailer和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)
})
})
}
Run Code Online (Sandbox Code Playgroud)
我的错误:
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: ...
Run Code Online (Sandbox Code Playgroud)
请告诉我如何修复此错误?谢谢!
更新代码
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;
})
})
};Run Code Online (Sandbox Code Playgroud)
我更新了我的代码,但现在我有错误 { [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' }
我猜模板渲染问题,你应该return从function (err, responseStatus){}forsuccess
这里我假设hello.jade在templates文件夹和templates文件夹中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: 'example@mail.com',
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 <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;
})
})
Run Code Online (Sandbox Code Playgroud)
更新:到目前为止,我猜这不是nodemailer相关问题,可能是template渲染问题。可以按页directory或按html页检查。
| 归档时间: |
|
| 查看次数: |
5646 次 |
| 最近记录: |