在春節來臨之際使用 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、使用
- 匯入 Nodemailer 模組
npm install nodemailer
- 建立可重複使用的傳輸器物件
// 格式:
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
- 配置 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可被郵件使用
},
]
};
- 傳送郵件
// 格式:
傳輸器物件.sendMail(SMTP配置, function(err, info) {
程式碼塊...
});
transporter.sendMail(options, function(err, info) {
// 如果傳送出現異常
if (err) {
// 列印異常資訊,並停止該函式
return console.log(err);
}
console.log('傳送成功');
});
三、可重用的郵件傳送模組(以伺服器掛載路由函式為例)
- 建立一個根目錄,並在根目錄中初始化一個配置檔案
npm init -y
- 在根目錄下切換到終端中,匯入
express
模組 和nodemailer
模組
npm install express nodemailer
- 在根目錄下建立一個
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("伺服器開啟成功!");
});
- 在根目錄下建立
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指令碼的朋友也可以私信哦!在這裡先給各位朋友拜個早年,祝各位朋友新年快樂,事業順利,學業有成!