• nodemailer实现node发送邮件


    作为一个前端er,利用node独立做一些全栈小项目,是很有效率和必要的。

    需要:

      做一个活动报名页面,用户填好的表单需要被工作人员收到,一想到把数据存数据库,还需要给工作人员写一个管理页面就觉得很麻烦。

      把表单数据通过邮件方式发送到相关人邮箱,很讨巧,很节约开发成本,就这样做。

    核心模块:nodemailer

    看看package.json

    {
      "devDependencies": {
        "gulp": "^3.8.11",
        "gulp-imagemin": "^2.2.1",
        "gulp-less": "^3.0.3",
        "gulp-notify": "^2.2.0",
        "gulp-uglify": "^1.2.0",
        "gulp-watch": "^4.2.4",
        "require-dir": "^0.3.0"
      },
      "dependencies": {
        "body-parser": "^1.15.0",
        "express": "^4.13.4",
        "nodemailer": "^2.3.0",
        "swig": "^1.4.2"
      }
    }
    • devDependencies里全是gulp模块
    • 引入body-parser模块可以通过req.body.xx获取到表单的数据
    • 常规使用express
    • nodemailer用来支持发送邮件
    • swig是node的一个模板引擎

    使用nodemailer:

    1.这里用到的是QQ邮箱,配置好地址和自己的账户名和密码

    var nodemailer = require("nodemailer");
    var smtpTransport = nodemailer.createTransport({
        host: 'smtp.exmail.qq.com',
        port: 465,
        secure: true, // use SSL
        auth: {
            user: 'yourqq@qq.com',
            pass: 'password'
        }
    });
    
    
    

    2.from和to设置邮件发送者和收件者的邮箱地址,

       subject邮件title

       html邮件内容

       smtpTransport.sendMail执行发送,这里的res是express router的响应参数,这里只贴主要代码,详细代码最后发github地址

    var mailOptions = {
      from: "yourqq@qq.com",
      to: "toqq@qq.com",
      subject: "node邮件",
      html:     "<b>姓名:  </b>"+name+"<br>"+
      "<b>性别:  </b>" + sex + "<br>"+
      "<b>电话:  </b>" + phone + "<br>"+
      "<b>邮箱:  </b>" + email + "<br>"+
      "<b>QQ:  </b>" + qq + "<br>"+
      "<b>年龄:  </b>" + age + "<br>"+
      "<b>联系地址:  </b><br><div style='margin-left:20px;margin-top:20px'>" + address + "</div><br>"+
      "<b>所在院校及专业:  </b><br><div style='margin-left:20px;margin-top:20px'>" + school + "</div><br>"+
      "<b>学校地址:  </b><br><div style='margin-left:20px;margin-top:20px'>" + schooladdress + "</div><br>"+
      "<b>跟我们说说你的大学吧:  </b><br><div style='margin-left:20px;margin-top:20px'>" + des + "</div><br>"+
      "<b>个人书单及评价:  </b><br><div style='margin-left:20px;margin-top:20px'>" + book + "</div><br>"
    }
    
    smtpTransport.sendMail(mailOptions, function(err, resp){
      if(err){
        res.send({
          code: 201,
          msg: "报名失败,请重试"
        })
      }else{
        res.send({
          code: 200,
          msg: "报名成功"
        })
      }
      smtpTransport.close();//关闭连接池
    });

    其实很简单,核心代码就是这些~


    绑定路由:

    app.get('/', function(req, res) {
      res.render('index');
    })
    app.get('/success', function(req, res) {
      res.render('success');
    })
    
    app.post('/join', function(req, res){
      
      var name = req.body.name,
      sex = req.body.sex,
      phone = req.body.phone,
      email = req.body.email,
      qq = req.body.qq,
      age = req.body.age,
      address = req.body.address,
      school = req.body.school,
      schooladdress = req.body.schooladdress,
      des = req.body.des,
      book = req.body.book;
      //next do send
    })

    前端当然也有一些事情要做,写好页面,验证表单,提交表单。
    当前只有两个页面,报名页面和报名成功页面。
    页面内容不再叙述,详情看下面git地址

    需要注意的问题:

    • 用不同的邮箱发送邮件,需要找到相应官方api地址
    • 邮件内容的html是有一定规则的,每个三方邮箱的规则都不同,可以查阅相关通用资料

    https://github.com/zimv/nodemailer-demo

    
    

      

    
    
  • 相关阅读:
    Delphi Code Editor 之 几个特性(转)
    Delphi Live Bindings 初探
    PC端和移动APP端CSS样式初始化
    移动端H5页面高清多屏适配方案
    js中的事件委托详解
    浏览器页面加载解析渲染机制
    CSS选择器渲染效率
    JS window对象的top、parent、opener含义介绍 以及防止网页被嵌入框架的代码
    关于苹果真机 getFullYear()返回值为NAN的问题
    js事件监听器用法实例详解
  • 原文地址:https://www.cnblogs.com/1wen/p/5368813.html
Copyright © 2020-2023  润新知