#node.js #mongodb #nodemailer
#node.js #mongodb #отправитель узлов
Вопрос:
Я пытаюсь работать над сценарием , в котором пользователь регистрируется и отправляет электронное письмо как пользователю, так и администратору. Я работаю над этим, используя node.JS / nodemailer/ MongodDB и тому подобное. Теперь я хочу сделать что-то подобное. Как только нажата кнопка зарегистрироваться, она сохраняет данные в базе данных, а затем отправляет электронное письмо обеим сторонам. Данные сохраняются в базе данных, никаких проблем, но часть электронной почты не работает. Мой исходный код выглядит так
'use strict'; var mongoose = require('mongoose'), jwt = require('jsonwebtoken'), bcrypt = require('bcrypt'), nodemailer = require('nodemailer'), User = mongoose.model('User'); function dispatch_emails(admin_email, user_email, fullname, company_name){ const transporter = nodemailer.createTransport({ service:'gmail', host: 'smtp.gmail.com', port:'587', auth:{ user: '***************@gmail.com', pass: '**************' }, secureConnection: 'false', tls: { ciphers: 'SSLv3', rejectUnauthorized: false } }); const mailOptions = { from :'**************@gmail.com', to: user_email, subject: 'Account Registration Successful!', html : 'lt;h3gt;Attention,' fullname ' , lt;/h3gt;lt;pgt;lt;h3gt;Your Account has been successfully setup.lt;/h3gt;lt;/pgt;lt;pgt; Please allow a maximum of 24 - 48 Hours for Review and succesful setup and approval of your online account.lt;/pgt;lt;/brgt;Regards,lt;/brgt; Online Services.' }; const AdminNotifyEmail = { from :'**************@gmail.com', to: admin_email, subject: 'Account Registration for ' user_email ', with Fullname : ' fullname ' (' company_name ')', html : 'lt;h3gt;Attention Admin , lt;/h3gt;lt;pgt;A new User has registered his Access with the following Information: lt;/brgt; lt;stronggt;Username : ' user_email 'lt;/stronggt;lt;/brgt;lt;stronggt;Company Name : ' company_name 'lt;/stronggt;lt;/brgt;lt;stronggt;Date of Registration : ' Date.Now 'lt;/stronggt;lt;/pgt;' }; transporter.sendMail(mailOptions,function(error,info){ if(error)throw error; return res.send({error:false, data: info, message: 'OK'}); }) transporter.sendMail(AdminNotifyEmail,function(error,info){ if(error)throw error; return res.send({error:false, data: info, message: 'OK'}); }) } exports.register = function(req,res){ var admin_email = req.body.admin_email; var newUser = new User(req.body); newUser.hash_password = bcrypt.hashSync(req.body.password, 10); newUser.save(function(err,user){ if(err){ return res.status(400).send({ message : err }); }else{ dispatch_emails(admin_email, newUser.user_email, newUser.fullname, newUser.company_name); user.hash_password = undefined; return res.json(user); } }) }; exports.sign_in = function(req,res){ User.findOne({ email : req.body.email },function(err,user){ if (err) throw err; if (!user || !user.comparePassword(req.body.password)){ return res.status(401).json({message: 'Cannot Login, Authentication Failed'}) } return res.json({token :jwt.sign({email: user.email, fullname: user.fullname, _id: user._id}, 'RESTFULAPI')}) }) }; exports.loginRequired = function(req,res,next){ if(req.user){ next(); }else{ return res.status(401).json({message: 'unauthorized User'}); } }; exports.profile = function(req,res,next){ if(req.user){ req.send(req.user); next(); }else{ return res.status(401).json({message: 'Invalid Token'}); } }
Данные сохраняются в базе данных без проблем, только это электронное письмо. Как мне это исправить, есть какие-нибудь идеи?
Комментарии:
1. получаете ли вы какие-либо отзывы от
return res.json(user);
? Можете ли вы, возможно, попытаться поймать любой выброс ошибки изdispatch_emails
функции2. я решил это @Koodies, спасибо!!
Ответ №1:
После некоторых усилий мне удалось заставить его отправлять электронные письма
Изменение с
exports.register = function(req,res){ var admin_email = req.body.admin_email; var newUser = new User(req.body); newUser.hash_password = bcrypt.hashSync(req.body.password, 10); newUser.save(function(err,user){ if(err){ return res.status(400).send({ message : err }); }else{ dispatch_emails(admin_email, newUser.user_email, newUser.fullname, newUser.company_name); user.hash_password = undefined; return res.json(user); } }) };
К этому
exports.register = function(req,res){ var admin_email = req.body.admin_email; var newUser = new User(); newUser.company_name = req.body.company_name; newUser.fullname = req.body.fullname; newUser.user_email = req.body.user_email; newUser.phone_number = req.body.phone_number; newUser.timezone = req.body.timezone; newUser.hash_password = bcrypt.hashSync(req.body.password, 10); newUser.save(function(err,user){ if(err){ return res.status(400).send({ message : err }); }else{ dispatch_emails(admin_email, newUser.user_email, newUser.fullname, newUser.company_name); user.hash_password = undefined; return res.json(user); } }) };
И вся информация отправляется по электронной почте без забот. Спасибо всем.
Надеюсь, это может кому-то помочь в будущем.