用Node.js和Express.js和AngularJs和nodemiailer发送邮件不发送邮件

我已经看过各种教程,并通过使用Node.js和Express.js通过HTML和AngularJs页面发送基本电子邮件做了许多search,但根本无法让我的实现工作。 我知道我错过了一些愚蠢的东西。

我select使用nodemailer作为Node.js包,并在我的Express.js API中使用它来发送实际的邮件。

从我的视图到API的path如下 :查看(表单)>>控制器>>电子邮件工厂>> API

我得到了每个步骤的结果(数据的控制台日志),但电子邮件失败。

在Chrome开发工具中,我在Headers中获得了200 OK的状态代码,但实际上失败了。 当我查看“响应”或“预览”时,会看到以下消息:

 {error: "connect ETIMEDOUT 64.233.184.109:465"} error:"connect ETIMEDOUT 64.233.184.109:465" 

在Bash控制台(我正在运行我的服务器),我可以看到API端点被击中,因为我得到这个console.log输出:

 THIS IS THE API HIT:Email to: corne.leroux@outlook.comSubject: This is my subjectMessage: This is my message 

我一直在使用的一些参考文献:

http://javascript.tutorialhorizo​​n.com/2015/07/02/send-email-node-js-express/

https://blog.ragingflame.co.za/2012/6/28/simple-form-handling-with-express-and-nodemailer

我是Express.js的绝对新手,并且对Node.js的了解有限。

这是我的基本实现:

HTML视图:

 <div class="container"> <form name="createEmailForm" method="post" action="" class="form-horizontal" role="form"> <div class="form-group"> <label for="emailAddress" class="col-lg-3 col-md-3 col-xs-12 control-label">From Email Address</label> <div class="col-lg-9 col-md-9 col-xs-12"> <input ng-model="formData.emailAddress" type="text" class="form-control" id="emailAddress" name="emailAddress" placeholder="Email Address" required> </div> </div> <div class="form-group"> <label for="clientName" class="col-lg-3 col-md-3 col-xs-12 control-label">Name</label> <div class="col-lg-9 col-md-9 col-xs-12"> <input ng-model="formData.clientName" type="text" class="form-control" id="clientName" name="clientName" placeholder="Name" required> </div> </div> <div class="form-group"> <label for="clientMessage" class="col-lg-3 col-md-3 col-xs-12 control-label">Message</label> <div class="col-lg-9 col-md-9 col-xs-12"> <input ng-model="formData.clientMessage" type="text" class="form-control" id="clientMessage" name="clientMessage" placeholder="Message" required> </div> </div> </form> <button class="btn btn-primary" ng-click="submit(formData)">Send</button> </div> 

AngularJs控制器:

 $scope.submit = function () { var formData = $scope.formData; console.log(JSON.stringify($scope.formData)); sendMail(formData); }; function sendMail(formData) { console.log('createEmail: ', formData); return EmailFactory.sendMail(formData) .then(function (data, status, headers, config) { console.log("Email Sent"); }); } 

AnularJs工厂:

 function sendMail() { return $http.post('/api/send') .then(Success) .catch(Failure); function Success(responce) { console.log(responce.data); return responce.data; } function Failure(error) { console.log('A problem occurred while sending an email.' + JSON.stringify(error)); } } 

Express.js API

 var express = require('express'); var nodemailer = require("nodemailer"); var router = express.Router(); var mongoose = require('mongoose'); var customers = require('../schemas/customers.js'); var suppliers = require('../schemas/suppliers.js'); var products = require('../schemas/products.js'); var smtpTransport = nodemailer.createTransport({ service: "gmail", host: "smtp.gmail.com", auth: { user: "cjleroux8@gmail.com", pass: "*********" } }); router.post('/send', function (req, res, next) { var mailOptions = { to: req.body.emailAddress, subject: req.body.clientName, text: req.body.clientMessage } console.log('THIS IS THE API HIT:' + 'Email to: ' + mailOptions.to + 'Subject: ' + mailOptions.subject + 'Message: ' + mailOptions.text); smtpTransport.sendMail(mailOptions, function (error, response) { if (error) { console.log(error); res.json({error: "API Error"}); } else { console.log("Message sent: " + response.message); res.json({ response: "sent" }); } }); }); 

这是我的app.js

 var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var index = require('./routes/index'); var users = require('./routes/users'); var api = require('./routes/api'); mongoose.Promise = global.Promise; mongoose.connect(process.env.MONGO_CON || 'mongodb://127.0.0.1:27021/impi'); var app = express(); // view engine setup // app.set('views', path.join(__dirname, 'views')); // app.set('view engine', 'html'); app.use(express.static(__dirname)); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', index); app.use('/users', users); app.use('/api', api); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app; 

这是我的index.js

 var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.sendFile('index.html'); }); module.exports = router; 

你的工厂函数sendMail应该有formData参数,然后在post请求中发送这个数据。 工厂应该是这样的:

 function sendMail(formData) { return $http.post('/api/send', formData) .then(Success) .catch(Failure); function Success(responce) { console.log(responce.data); return responce.data; } function Failure(error) { console.log('A problem occurred while sending an email.' + JSON.stringify(error)); } } 

和你的API

发送电子邮件,你应该from nodemailer电子邮件设置from所以你可以设置

 var smtpTransport = nodemailer.createTransport({ service: "Gmail", host: "smtp.gmail.com", auth: { user: "cjleroux8@gmail.com", pass: "*********" } }, { from: 'example@gmail.com', }); router.post('/api/send', function (req, res, next) { var mailOptions = { to: req.body.emailAddress, subject: req.body.clientName, text: req.body.clientMessage }; console.log('THIS IS THE API HIT:' + 'Email to: ' + mailOptions.to + 'Subject: ' + mailOptions.subject + 'Message: ' + mailOptions.text); smtpTransport.sendMail(mailOptions, function (error, response) { if (error) { console.log(error); res.json({error: "API Error"}); } else { console.log("Message sent: " + response.message); res.json({ response: "sent" }); } }); }); 

或者你可以from mailOptions设置

 var mailOptions = { from: 'example@gmail.com', to: req.body.emailAddress, subject: req.body.clientName, text: req.body.clientMessage } 

我已经实现了使用nodejs和express发送电子邮件的基本应用程序。 我使用nodemailer模块,但我没有在我的应用程序中添加mongodb。 检查下面的代码是否适合你。

的index.html

 <html> <head> <title>Node.JS Email application</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><script>// <![CDATA[ $(document).ready(function() { var from, to, subject, text; $("#send_email").click(function() { to = $("#to").val(); subject = $("#subject").val(); text = $("#content").val(); $("#message").text("Sending E-mail...Please wait"); $.get("http://192.168.2.47:3000/send", { to: to, subject: subject, text: text }, function(data) { if (data == "sent") { $("#message").empty().html("Email is been sent at " + to + " Please check inbox!"); } }); }); }); </script> </head> <body> <div id="container"> <h1>Mailer In Node.JS</h1> <br/> <input id="to" type="text" placeholder="Enter E-mail ID where you want to send" /><br/> <input id="subject" type="text" placeholder="Write Subject" /><br/> <textarea id="content" cols="40" rows="5" placeholder="Write what you want to send"></textarea> <br/> <button id="send_email">Send Email</button> <span id="message"></span> </div> </body> </html> 

server.js

 var express = require('express'); var nodemailer = require("nodemailer"); var app = express(); var smtpTransport = nodemailer.createTransport({ service: "gmail", host: "smtp.gmail.com", auth: { user: "******", pass: "***" } }); app.get('/', function(req, res) { res.sendfile('index.html'); }); app.get('/send', function(req, res) { //code to send e-mail. //Will be shown soon. var mailOptions = { to: req.query.to, subject: req.query.subject, text: req.query.text } console.log(mailOptions); smtpTransport.sendMail(mailOptions, function(error, response) { if (error) { console.log(error); res.end("error"); } else { console.log("Message sent: " + response.message); res.end("sent"); } }); }); app.listen(3000, function() { console.log("Express Started on Port 3000"); }); 

userpass server.js文件使用有效的邮件ID和密码。