如何创建一个使用 node 和 mongodb 发送邮件的 api

Posted

技术标签:

【中文标题】如何创建一个使用 node 和 mongodb 发送邮件的 api【英文标题】:How to create an api that sends mails using node and mongodb 【发布时间】:2020-05-11 11:56:52 【问题描述】:

我正在尝试创建一个发送邮件的应用程序。 它在表单按钮的单击上获取用户输入(收件人、主题、消息)发送邮件,并将该邮件存储在 mongodb 上

前端

<form>
<span>
to :<input type='text' >
</span>

cc :<input type='text' >
</span>

bcc :<input type='text' >
</span>

<span>
subject :<input type='text' >
</span>

<span>
message :<input type='text' >
</span>
</form>

后端

to = 'sender@gmail.com',
cc = 'sender@gmail.com',
bcc = 'sender@gmail.com',
subject = 'A project proposal',
message = 'the body of your mail',
etc...

    架构

    const mongoose = require('mongoose');

    const UserSchema = new mongoose.Schema(

    到: 类型:字符串, , 抄送: 类型:字符串, , 密送: 类型:字符串, , 密送: 类型:字符串, , 主题: 类型:字符串, , 信息: 类型:字符串, , 附件: 类型:字符串, , 日期: 类型:日期, 默认值:Date.now ,

    );

    const Mail = mongoose.model('Mail', UserSchema);

    module.exports = 邮件;

A.p.i

const Mail = require('../models/Mail');

// Home Page
router.get('/', forwardAuthenticated, (req, res) => res.render('home'));

// Mail
router.get('/mail', ensureAuthenticated, (req, res) =>
  res.render('mail', 
    user: req.user,
    mail: req.mail

  )
);

router.post('/mail', (req, res) => 
  const  to, cc, bcc, subject, message, attachment, account  = req.body;
  let errors = [];

  if (!name || !subject || !message || !account) 
    errors.push( msg: 'Please enter all fields' );
  

  if (errors.length > 0) 
    res.render('register', 
      errors,
      name,
      subject,
      message,
      account
    );
   else 
    const newMail = new Mail(
      to,
      cc,
      bcc,
      subject,
      message,
      attachment,
      account
    );

    newMail
      .save()
      .then(mail => 
        req.flash(
          'success_msg',
          'mail sent'
        );

      )
      .catch(err => console.log(err));

  
)
module.exports = router;

我该怎么做呢?

【问题讨论】:

这能回答你的问题吗? Using Email Templates from MongoDB in Node.js 【参考方案1】:

尝试express-mailer 发送电子邮件。在此,您还可以通过逗号分隔的列表或数组以 CC 和 Bcc 形式发送电子邮件。请仔细检查express-mailer 文档。

var app = require('express')(),
var mailer = require('express-mailer')

mailer.extend(app, 
    emailFrom: "yourEmail@gmail.com", 
    host: 'smtp.gmail.com', // hostname
    secureConnection: true, // use SSL
    port: 465, // port for secure SMTP
    transportMethod: 'SMTP', // default is SMTP.
    auth: 
        user: 'yourEmail@gmail.com', // Your Email 
        pass: '*******' // Your Password
    
);

app.mailer.send('../views/emailTemplate/emailTemplate.ejs',  to: 'reciverEmail@gmail.com', subject: 'Your Email Subject', function (err, message) 
    if (err) throw new Error(err);
    console.log(message);
    return;
);

【讨论】:

【参考方案2】:

我使用“nodemailer”模块,你可以阅读他们的文档,但我给你看一个简单的例子:

var nodemailer = require ('nodemailer');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var transporter = nodemailer.createTransport ( 
    service: 'gmail', 
    auth:  
            user: 'youre@gmail.com', 
            pass: 'yourePassword' 
         
    );

 module.exports=
     sendAUTH:function(link, email)
        const mailOptions =  
            from: 'youre@gmail.com',  
            to: email,  
            subject: 'Subject of your email', 
            html: `<a href='`+link+`'>link</a>` 
          ;
          transporter.sendMail (mailOptions, function (err, info)  
            if (err) 
              console.log (err) 
            else 
              console.log (info); 
         );
     
 

【讨论】:

以上是关于如何创建一个使用 node 和 mongodb 发送邮件的 api的主要内容,如果未能解决你的问题,请参考以下文章

node.js如何配置mongodb连接池?

无法使用 MongoDB + Node 创建多个对象

如何使用可选参数创建端点? (节点、快递、MongoDB)

如何在 node.js 中重用 mongodb 连接

如何打包和部署Node.js + express Web应用程序?

Node、MongoDB、Mongoose 设计选择 - 创建两个集合或一个集合