Node---发送邮件练习

483 阅读1分钟

最近去学node就是想弄一个自己发送邮件的功能来玩玩,昨天学了node的hello world,所以今天终于要开始玩了。

发送邮件练习

1.创建sendMail.js存放发送方法

引入插件nodemailer,因为我想使用阿里云邮箱来发送,根据阿里云文档使用smtp所以也引入了nodemailer-smtp-transport.

const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');

let transporter = nodemailer.createTransport(smtpTransport({
  host: 'smtp.qiye.aliyun.com',
  port: 25,
  auth: {
    user: '邮箱账户',
    pass: '邮箱密码',
  }
}));

let sendMail = () => {
  return new Promise((resolve, reject) => {
    transporter.sendMail({
      to: '接收人邮箱',
      subject: '一封来自node的邮件',// 标题
      html: '内容',
      from: '发送人邮箱',// 一般是你的登录邮箱
    }, (err, res) => {
      if(err) {
        reject(err);
      } else {
        resolve('发送成功');
      }
    })
  })
}

module.exports = sendMail;

2.创建服务器文件app.js并发送邮件(参考上一篇文章):

app_aliyun.js引入sendMail.js执行发送方法。

const http = require('http');
const sendMail = require('sendMail');

http.createServer((req, res) => {

  console.log('启动:127.0.0.1:8080');

  res.writeHead(200,
    {
      'Content-Type':'text/html',
      'Access-Control-Allow-Origin': '*', // 允许跨域访问
      'Access-Control-Allow-Headers': '*', // 允许访问
    }
  );
  
  let msg = '';
  req.on('end', () => {

    // 检查响应代码,检查正文是否为空,确保它是有效的JSON
    if(res.statusCode === 200) {
      // 发送邮件
      sendMail(data).then((data) => {
        res.end(JSON.stringify(data));
      });
    } else {
      res.end('访问失败');
    }

  })

}).listen(8080);

console.log('启动');

3.终端上返回(邮件已成功发送到你的邮箱,请签收):


注意点(我掉过的坑):

访问外部接口时要把异步转为同步,我这里用的是Promise方法,主要用于解决res.end(data)中data的数据还没获取就已执行,则返回空数据。