Как отправить электронное письмо на адреса электронной почты после сохранения базы данных (MongoDB/ Node.JS / Отправитель узлов)

#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);  }  }) };  

И вся информация отправляется по электронной почте без забот. Спасибо всем.

Надеюсь, это может кому-то помочь в будущем.