Node---发送邮件练习

最近去学node就是想弄一个本身发送邮件的功能来玩玩,昨天学了node的hello world,因此今天终于要开始玩了。javascript

发送邮件练习

1.建立sendMail.js存放发送方法html

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

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并发送邮件(参考上一篇文章):node

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的数据还没获取就已执行,则返回空数据。服务器

相关文章
相关标签/搜索