利用邮箱APP进行消息推送的实现

昨天讲了最终我使用了邮箱APP来进行消息推送通知,并给出了我的理由。今天来讲一下具体的实现:

在node里利用了nodemailer这个库,由于需要使用SMTP方式发送,所以首先去配置一下发送的邮箱,以qq邮箱为例,在设置-账户相应地方设置好并编写配置代码:

const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
  service: 'qq',
  auth: {
    user: '***@qq.com',
    pass: '****'
  }
});

然后将发送邮件的方法编写成Promise方法并暴露出去:

module.exports = async ({from='"你有新消息了" <40854@qq.com>',to='40854@qq.com',subject='你有新邮件了'})=> {
  var mailOptions = {
    from, // 发送者
    to,
    subject, // 标题
  };
  return new Promise((resolve,reject)=>{
    transporter.sendMail(mailOptions, function (err, info) {
      if (err) {
        return reject(err);
      }
      resolve(info)
    });
  })
}

具体发送邮件的方法可以配置多种多样的方式,依个人需求编写。我只需要到消息通知,就不需要编写邮件详情里的附件和html了。

剩下的就是业务逻辑里写通知的逻辑:

const email = require('./email')

handlerFunction()
    .then(()=>{
        return email()
    })
    .catch(console.log)

这样就完成了业务逻辑的编写,可以实现利用QQ邮箱的推送来达到消息的通知了。

但是从用户角度,到了这步还有一点暇疵。譬如这就发生在我身上:因为推送太频繁导致我邮箱每天都收到大量来自于自己发送给自己的邮件而找不到自己想要查看的邮箱。

解决这个其实只需要在邮箱里配置一下(各家邮箱都有),譬如我用QQ邮箱就在收信规则里设置,邮件主题含有“你有新消息了”就自动回收进垃圾站并删除就可以了,接下来的推送只会在出现在通知而不会存在收件箱里。