【问题标题】:How do i Send email to Email addresses after Database is saved (MongoDB/ Node.JS / NodeMailer)保存数据库后如何向电子邮件地址发送电子邮件(MongoDB/Node.JS/NodeMailer)
【发布时间】:2022-10-18 08:20:04
【问题描述】:

我正在尝试处理用户注册并将电子邮件发送给用户和管理员的场景。我正在使用 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 : '<h3>Attention,'+fullname+' , </h3><p><h3>Your Account has been successfully setup.</h3></p><p> Please allow a maximum of 24 - 48 Hours for Review and succesful setup and approval of your online account.</p></br>Regards,</br> Online Services.'
        };

        const AdminNotifyEmail = {
            from :'**************@gmail.com',
            to: admin_email,
            subject: 'Account Registration for '+user_email+', with Fullname : '+fullname+' ('+company_name+')',
            html : '<h3>Attention Admin , </h3><p>A new User has registered his Access with the following Information: </br> <strong>Username : '+user_email+'</strong></br><strong>Company Name : '+company_name+'</strong></br><strong>Date of Registration : '+Date.Now+'</strong></p>'
        };
    
        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'});
    }
}

数据毫无问题地保存到数据库中,仅此电子邮件。我该如何解决这个问题,有什么想法吗?

【问题讨论】:

  • 您收到来自return res.json(user); 的任何反馈吗?您能否尝试从dispatch_emails 函数中捕获任何错误抛出
  • 我解决了@Koodies,谢谢!

标签: node.js mongodb nodemailer


【解决方案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);
        }
    })
};

并且整个信息发送到电子邮件,不用担心。感谢大家。

希望它可以帮助未来的人。

【讨论】:

    【解决方案2】:

    拜托我的老板给了我一个项目要做 编写一个执行以下操作的批量邮件应用程序:

    1. 准备客户电子邮件数据库
    2. 提供一个表单来设计html中的电子邮件正文
    3. 发送功能将邮件发送到指定的电子邮件组
    4. 组电子邮件地址

      请问我如何开始这个项目,我需要方向。我是 nodeJs 的新手

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2017-03-01
      • 2014-07-20
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多