1. 程式人生 > 其它 >在春節來臨之際使用 javascript + Node.js 實現郵件傳輸功能給遠方的朋友發封郵件拜個早年

在春節來臨之際使用 javascript + Node.js 實現郵件傳輸功能給遠方的朋友發封郵件拜個早年

技術標籤:Node.jsjavascriptjsnodenode.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: "[email protected]", //你的郵箱 pass: "***********" //郵箱授權碼,並非是你的郵箱密碼 } });

如何獲取授權碼,請參考以下連結

  • 163郵箱獲取授權碼:https://jingyan.baidu.com/article/495ba841ecc72c38b30ede38.html
  • qq郵箱獲取授權碼:https://jingyan.baidu.com/article/90895e0f2af42664ec6b0b14.html
  1. 配置 SMTP 信封
 //設定郵箱的選項
const options = {
                from: '"原始碼空間" <[email protected]>', //自己的郵箱
                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("原始碼空間", "[email protected]", "光明頂團隊祝願全國人民新春快樂!", "<h4>春節將至,願你背上幸福的行囊,帶上開心的思念果,跨上快樂號的列車,把一年的勞累遺忘,一年的疲憊甩開,輕鬆快樂歸家,平安按時到達。無憂考網蒐集的《2021給領導拜年簡訊祝福語》,供大家參考閱讀,更多內容 ,請訪問祝福語頻道。</h4>");
    // 因為上述方法中包含非同步事件,所有我們如果使用同步的方法則獲取不到返回的值,所有我們要使用定時器來獲取返回的值
    setTimeout(() => {
        // 如果返回的是null
        if (sendMail.error === null) {
            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 = "[email protected]";

// 建立可重複使用的郵件傳輸器
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指令碼的朋友也可以私信哦!在這裡先給各位朋友拜個早年,祝各位朋友新年快樂,事業順利,學業有成!