在春节来临之际使用 javascript + Node.js 实现邮件传输功能给远方的朋友发封邮件拜个早年

一、引言

电子邮件,是互联网应用最广泛使用的服务之一,通过电子邮件系统,我们可以与世界上任何一个角落的网络用户进行联系。

在日常生说中,我们会常常看到一些网站有邮箱获取验证码验证注册、修改或者找回密码……等功能,目的是验证当前的用户确实是我们所声称的用户,也更是为了进一步保护用户的个人资料等信息,因为这个涉及到了隐私问题。近期,本人开发的个人博客项目—源码空间的找回密码功能,就需要用到邮件传输的功能,如下图所示:

在这里插入图片描述

那么问题来了,我们怎么实现邮件传输功能呢?不可能说又要学习其他的语言啥的吧,这个大家不用担心,在 Node.js环境下,已经给我们提供了许多邮件传输功能的第三方包,并且使用它们非常简单。那么今天我们使用Nodemailer第三方包以及Node.js + Express实现邮件传输功能。

二、Nodemailer 模块

1、简介

Nodemailer 是 Node.js 应用程序的一个第三方模块,可以方便地实现发送电子邮件的功能。
Github项目地址为:https://github.com/andris9/Nodemailer

该项目于 2010 年开始,至今已经相当稳定,这也是如今大多数 Node.js 用户默认情况下发送邮件的解决方案。

2、特点

  • 支持Unicode编码
  • 支持Window系统环境
  • 支持HTML内容和普通文本内容
  • 支持附件(传送大附件)
  • 支持HTML内容中嵌入图片
  • 支持SSL/STARTTLS安全的邮件发送
  • 支持内置的transport方法和其他插件实现的transport方法
  • 支持自定义插件处理消息
  • 支持XOAUTH2登录验证

3、使用

  1. 导入 Nodemailer 模块
npm install nodemailer
  1. 创建可重复使用的传输器对象
// 格式:
let transporter = nodemailer.createTransport(transport[, defaults]);
/*
参数说明
transporter(传输器对象): 是一个能够发送邮件的对象
transport(传输): 是传输配置对象、连接 URL 或传输插件实例,对象类型,对传输器的配置
defaults(默认):是定义邮件选项的默认值的对象
*/
let transporter =nodemailer.createTransport({
    host: "smtp.163.com",// 主机:以什么邮箱格式发送:我这里用的是163邮箱,当然如果是qq邮箱,则将163换成qq即可
    secureConnection: true,//使用了SSL,安全方式发送,建议都加
    port: 465, //端口:SMTP端口
    // 身份验证
    auth: {
      	// 上面的host选项是什么格式的邮箱,就使用什么邮箱
        user: "inlett_wang@163.com", //你的邮箱
        pass: "***********" //邮箱授权码,并非是你的邮箱密码
    }
});

如何获取授权码,请参考以下链接

  • 163邮箱获取授权码:https://jingyan.baidu.com/article/495ba841ecc72c38b30ede38.html
  • qq邮箱获取授权码:https://jingyan.baidu.com/article/90895e0f2af42664ec6b0b14.html
  1. 配置 SMTP 信封
 //设置邮箱的选项
const options = {
                from: '"源码空间" <inlett_wang@163.com>', //自己的邮箱
                to: req.params.uemail, //要发送的邮箱
                subject: "源码空间验证码", //设置主题
                html: "验证码为:<h4>54321</h4>60秒内有效",//可发送带有html标签的数据
  							text:"验证码为:54321,60秒内有效",//可发送文本的数据
  							// 可携带附件(多个)
  							attachments : 
                    [
                        {
                            filename: 'img1.png',            // 改成你的附件名
                            path: 'public/images/img1.png',  // 改成你的附件路径
                            cid : '00000001'                 // cid可被邮件使用
                        },
                        {
                            filename: 'img2.png',            // 改成你的附件名
                            path: 'public/images/img2.png',  // 改成你的附件路径
                            cid : '00000002'                 // cid可被邮件使用
                        },
                    ]
            };

  1. 发送邮件
// 格式:
传输器对象.sendMail(SMTP配置, function(err, info) {
   代码块...
});

transporter.sendMail(options, function(err, info) {
  	// 如果发送出现异常
    if (err) {
      // 打印异常信息,并停止该函数
      return console.log(err);
    }
    console.log('发送成功');
});

三、可重用的邮件发送模块(以服务器挂载路由函数为例)

  1. 创建一个根目录,并在根目录中初始化一个配置文件
npm init -y
  1. 在根目录下切换到终端中,导入express 模块 和 nodemailer 模块
npm install express nodemailer
  1. 在根目录下创建一个app.js文件作为服务器
const express = require("express");
const sendMail = require("./sendMail");
const app = express();

app.get("/sendMail", (req, res) => {
    sendMail.sendEmail("源码空间", "2840250928@qq.com", "光明顶团队祝愿全国人民新春快乐!", "<h4>春节将至,愿你背上幸福的行囊,带上开心的思念果,跨上快乐号的列车,把一年的劳累遗忘,一年的疲惫甩开,轻松快乐归家,平安按时到达。无忧考网搜集的《2021给领导拜年短信祝福语》,供大家参考阅读,更多内容 ,请访问祝福语频道。</h4>");
    // 因为上述方法中包含异步事件,所有我们如果使用同步的方法则获取不到返回的值,所有我们要使用定时器来获取返回的值
    setTimeout(() => {
        // 如果返回的异常不为空,则证明邮件发送存在异常
        if (sendMail.error) {
        	// 那么就返回状态码和异常提示信息
            res.send({
                status: 1,
                msg: "邮件发送失败!"
            });
        }
        // 否则返回的异常为空,那么证明邮件发送成功,返回状态码和提示信息
        res.send({
            status: 0,
            msg: "邮件发送成功!"
        });
    }, 1000);

});

app.listen(8080, "127.0.0.1", () => {
    console.log("服务器开启成功!");
});
  1. 在根目录下创建sendMail.js文件作为可重用的邮件传输模块
// 导入nodemailer模块
const nodemailer = require("nodemailer");

// 发送方的邮箱
const myEmailer = "inlett_wang@163.com";

// 创建可重复使用的邮件传输器
const transporter = nodemailer.createTransport({
    host: "smtp.163.com", //邮箱格式
    secureConnection: true, //使用了 SSL
    port: 465, //SMTP端口
    // 配置邮箱选项
    auth: {
        user: myEmailer, //你的邮箱
        pass: "*********" //邮箱授权码,并非邮箱密码
    }
});

// 创建发送邮箱的函数
module.exports.sendEmail = function(title, toEmail, subject, html = null, text = null, attachments = null) {
    // 配置SMTP信封
    const options = {
        from: `"${title}" <${myEmailer}>`, //发送方的邮箱
        to: toEmail, //接收方的邮箱
        subject: subject, //邮箱主题
        html: html ? html : "", //判断html参数是否存在,存在即发送,否则为空字符串
        text: text ? text : "", //判断text参数是否存在,存在即发送,否则为空字符串
        attachments: attachments ? attachments : "" //判断附件是否存在,存在即发送,否则为空字符串
    };
    // 发送邮箱
    transporter.sendMail(options, (err, info) => {
        // 判断是出现异常
        if (err) {
            // 出现异常则将异常对象存储
            module.exports.error = err;
        }
        // 无异常则存储null
        module.exports.error = null;
    });
};

注意:当在路由模块、路由处理函数模块、或者app服务器模块下想要使用邮件传输功能,那么就可以使用以上步骤三的sendMail模块拿过来配置后直接使用,并在使用的地方调用函数即可。

四、总结

以上基本上就是在Node.js环境下使用nodemailer第三方包实现邮件传输功能的基本使用方法,当然还有其他的办法实现邮件传输,下期我们介绍其他的方法。

如果本篇文章有哪里写的不对的地方,还请各位朋友多多指点,当前有喜欢或者想学习Node.js或者js脚本的朋友也可以私信哦!在这里先给各位朋友拜个早年,祝各位朋友新年快乐,事业顺利,学业有成!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值