Nodemailer邮箱开箱体验

495 阅读2分钟

我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!

Nodemailer 是一个简单易用的 Node.JS 邮件发送模块,可以方便地发送电子邮件。该项目于 2010 年开始,至今已经在github上已经有14.5k的stars。这也是如今大多数 Node.js 用户默认情况下发送邮件的解决方案。 Nodemailer的主要特点包括:

  • 支持Unicode编码,包括表情符号
  • 支持Window系统环境,–您可以使用npm在Windows上,就像其他模块一样,没有编译的依赖项
  • 支持HTML内容和普通文本内容
  • 支持附件(传送大附件)
  • 支持HTML内容中嵌入图片
  • 支持SSL/STARTTLS安全的邮件发送
  • 支持内置的transport方法和其他插件实现的transport方法
  • 支持自定义插件处理消息
  • 支持XOAUTH2登录验证 官网地址:nodemailer.com

GitHub地址:github.com/nodemailer/…

安装使用Nodemailer

首先,我们要下载安装Nodemailer  注意node版本:Node.js v6+

npm install nodemailer --save

然后编写发邮件的函数

/**
 * +----------------------------------------------------------------------
 *  邮件逻辑
 * +----------------------------------------------------------------------
 */

 const nodemailer = require('nodemailer')
 const {smtp} = require('../config/config')

 
 const sendMails =  async function ({to, subject, content,attachments }) {
     return new Promise(resolve => {
         const { host, port, secure, user, password } = smtp;
         if (!user || !password || !to) {
            return;
         }
         const html = `<!DOCTYPE HTML>
             <html>
             <head>
                 <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
                 <title>${subject}</title>
             </head>
             <body>
                 <div class="mail-box">
                     ${content}
                 </div>
             </body>
         </html>`;
         nodemailer
             .createTransport({
                 host,  // 设置服务
                 port, // 端口
                 secure, // 是否使用TLS,true,端口为465,否则其他或者568
                 auth: { // 用户名和密码/授权码
                    user,
                    pass: password
                 }
             })
             .sendMail(
                 {
                    from: `test <${user}>`, // 发送邮箱
                    to: to, //接收邮箱
                    subject: subject, //标题
                    html, //内容
                    attachments //附件
                 },
                 (err,info) => {
                     if (err) {
                        console.error(`对${to}邮件发送失败!`,err)
                        resolve(false);
                        return
                     }
                     console.log(`对${to}邮件发送成功!`,info)
                     resolve(true);
                 }
             );
     });
 }
 module.exports = sendMails

接下来就是调用发送邮件了

const sendMails = require("../utils/mail")
 // 邮件发送
sendMails({
    to: users.userEmail,
    subject: `项目测试邮件`,
    content: ‘测试邮件发送’
})

按照这个格式,发送成功是没什么问题的。

提示

QQ 的 host 是 smtp.qq.com;163 的 host 是 smtp.163.com

163和qq获取授权码

163邮箱的话,要开启POP3/SMTP服务,在设置 --> POP3/SMTP/IMAP页面,设置。开通后会有个授权码的,配置里的密码,就是用这个授权码

qq邮箱的话,同样也要开启这个服务,设置 --> 账户 --> POP3服务,点击开启,就会有个授权码。

这样qq和163授权码就开启了,密码那里就可以填授权吗就行

常见错误

535 错误

Error: Invalid login: 535 Error: authentication failed

认证失败:

  • 可能是账号密码错误
  • 连接时加 ssl:secureConnection: true,

553 错误

Error: Mail command failed: 553 Mail from must equal authorized user

发件人和认证的邮箱地址不一致

  • auth.user 需要与 from 中的邮箱一致

好啦。更多邮箱的配置,像CC、Xoauth2、attachments等可去官网详细了解 nodemailer.com/message/