抱歉我的英语,我希望有人可以帮助我,我尝试使用 gmail 作为 smtp 发送模板电子邮件,在同一个文件 server.js 文件中一切正常,但我试图在不同的模块中分离,并且在调用时出现错误相同的功能,我在调试模式下收到空错误
TypeError: Cannot read property 'then' of undefined
at Object.exports.sendmail (/src/react/impex/jumbo-react-flat/mailing/server.js:44:4)
at exports.sendregistermail (/src/react/impex/jumbo-react-flat/mailing/controllers/mailing.js:25:10)
at Layer.handle [as handle_request] (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/layer.js:95:5)
at next (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/layer.js:95:5)
at /src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/index.js:335:12)
at next (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/index.js:275:10)
at jsonParser (/src/react/impex/jumbo-react-flat/mailing/node_modules/body-parser/lib/types/json.js:109:7)
在控制台我得到
/src/react/impex/jumbo-react-flat/mailing/node_modules/express-mailer/lib/express-mailer.js:81
callback(null, res.message);
^
TypeError: callback is not a function
at MailComposer.returnCallback (/src/react/impex/jumbo-react-flat/mailing/node_modules/express-mailer/lib/express-mailer.js:81:11)
我的代码
服务器.js
// call the packages we need
var express = require('express'); // call express
var bodyParser = require('body-parser');
path=require('path');
var app = express(); // create a server
var port = process.env.PORT || 8002; // set our port
var mailer = require('express-mailer'); // call express
var promise = require('promise');
// set the view folder to views
app.set('views', __dirname + '/views');
// set the view engine to pug
app.set('view engine', 'pug');
app.use(bodyParser.json());
var routes = require('./routes/routes'); //importing route
routes(app); //register the route
// test route to trigger emails
// Configure express-mail and setup default mail data.
mailer.extend(app, {
from: '[email protected]',
host: 'smtp.gmail.com', // hostname
secureConnection: true, // use SSL
port: 465, // port for secure SMTP
transportMethod: 'SMTP', // default is SMTP. Accepts anything that nodemailer accepts
auth: {
user: 'user', // gmail id
pass: 'pass' // gmail password
}
});
app.listen(port, function () {
console.log(`Escuchando en el puerto ${port}!`);
});
// Send email.
exports.sendmail = function (template, mailOptions) {
app.mailer.send(template, mailOptions)
.then(function (err) {
debugger
if (err) {
return err;
}
return ;
});
}
邮寄.js
var express = require('express');
var request = require('request');
var server = require('../server.js');
var Promise = require('promise');
exports.sendregistermail = function (req, res) {
res.header('Content-Type', 'application/json');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type');
// Setup email data.
var mailOptions = {
to: '[email protected]',
subject: 'Registro en Impex Flowers',
user: { // data to view template
name: 'Polo Onofa',
thanks: 'Gracias por registrarte en impex FLowers',
message: 'Un representante se comunicara contigo para completar tu registro'
}
}
// Send email.
server.sendmail('emailorden', mailOptions, function (err) {
if (err) {
console.log(err);
res.send('Ocurrio un error al enviar tu email');
return;
}
return res.send('Email enviado correctamente!');
});
};
非常感谢你的帮助
mailer.send() 返回的是回调而不是承诺,因此您不能在此处使用 .then()。您应该按如下方式更改您的功能:
exports.sendmail = function (template, mailOptions) {
app.mailer.send(template, mailOptions, function (err) {
if (err)
return err;
return ;
});
}
关于重构代码的目标要重要得多:由于您正在创建一个用于发送邮件的模块,因此所有与邮件相关的内容都应该放在那里。mailer.extend()
以及sendmail()
应该搬到那里去。确保将您的实例传递app
给 mailing.js,以便您可以初始化快递邮件程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句