如何使用nodejs自動發送郵件?

以前用Nodejs作了不少服務端模塊, 最近抽空覆盤一下, 接下來筆者將介紹如何使用Nodejs來自動向用戶發送郵件.javascript

筆者將詳細介紹自動發送郵箱的實現方案, 以及經過一個實際的案例來帶你們掌握使用nodejs自動發送郵件, 最後會介紹一些實際的應用場景, 來加深對該方案的理解, 達到學以至用的目的.css

實現方案

實現自動發送郵件筆者採用了基於Nodejs生態的nodemailer, 它能夠輕鬆的幫咱們發送電子郵件, 官網地址: nodemailer.html

之因此選擇nodemailer是由於它提供了很是靈活的自定義配置和安全保障, 好比:前端

  • 具備零依賴關係的單一模塊, 代碼容易審覈,沒有死角
  • Unicode支持使用任何字符,包括表情符號💪
  • 郵件內容既支持普通文本, 還支持自定義html
  • 支持自定義附件
  • 支持安全可靠的SSL/STARTTLS郵件發送
  • 支持自定義插件處理郵件消息

還有不少特色筆者就不一一介紹了. 接下來咱們來看一個筆者簡化並翻譯的官網案例:java

"use strict";
const nodemailer = require("nodemailer");

// 使用async..await 建立執行函數
async function main() {
  // 若是你沒有一個真實郵箱的話可使用該方法建立一個測試郵箱
  let testAccount = await nodemailer.createTestAccount();

  // 建立Nodemailer傳輸器 SMTP 或者 其餘 運輸機制
  let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email", // 第三方郵箱的主機地址
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
      user: testAccount.user, // 發送方郵箱的帳號
      pass: testAccount.pass, // 郵箱受權密碼
    },
  });

  // 定義transport對象併發送郵件
  let info = await transporter.sendMail({
    from: '"Dooring 👻" <dooring2021@163.com>', // 發送方郵箱的帳號
    to: "bar@example.com, baz@example.com", // 郵箱接受者的帳號
    subject: "Hello Dooring", // Subject line
    text: "H5-Dooring?", // 文本內容
    html: "歡迎註冊h5.dooring.cn, 您的郵箱驗證碼是:<b>${emailCode}</b>", // html 內容, 若是設置了html內容, 將忽略text內容
  });
}

main().catch(console.error);
複製代碼

以上代碼是發送帶有純文本和HTML正文的電子郵件的完整示例. 筆者在代碼上作了詳細的翻譯, 咱們能夠總結出要想發送郵件, 咱們須要以下3個步驟:node

  • 建立Nodemailer傳輸器 SMTP 或者其餘運輸機制
  • 設置 Message 選項(將什麼消息發送給誰)
  • 使用先前建立的傳輸器的sendMail()方法傳遞消息對象

宏觀的使用流程咱們知道了, 接下來咱們落實到每個技術功能點來實現.咱們須要關注以下幾個核心點:webpack

  • 如何設置 host
  • 如何設置 auth
  • 如何配置 Message 選項

解答了以上3個問題, 咱們就能靈活的使用Nodemailer發送自定義郵件了.css3

如何設置host, port, secure

這裏筆者拿網易郵箱來舉例. 好比咱們想用咱們本身的網易郵箱給用戶發送郵件, 咱們須要先註冊一個用於發送郵件的網易郵箱, 好比dooring2021@163.com. 因爲咱們採用SMTP傳輸器 , 因此在郵箱主頁咱們找到以下選項並設置:git

在該頁面下方咱們能夠找到對應的host, 以下:github

關於portsecure, 咱們採用默認配置便可, 設置securetrue,表示端口默認使用465. 詳細配置以下:

如何設置auth

auth咱們在上一步的操做中已經涉及到了, 咱們在開啓IMAP/SMTP服務時會提示保存郵箱受權碼, 這裏的受權碼就是auth.pass的值, auth.user表示當前受權的郵箱.

如何設置Message

消息配置是咱們郵箱服務比較重要的部分, 官方提供了以下幾個配置說明:

這裏筆者給你們詳細介紹一下:

  • from 發件人的電子郵件地址。全部電子郵件地址均可以是純'sender@server.com「或格式化」‘發送者名稱’sender@server.com'
  • to 逗號分隔的列表或收件人的電子郵件地址的排列
  • cc 逗號分隔的列表或將顯示在「抄送」字段中的收件人電子郵件地址數組
  • bcc 逗號分隔的列表或將顯示在「密件抄送:」字段中的收件人電子郵件地址數組
  • subject 電子郵件的主題
  • text 消息的文本內容
  • html 消息的html內容, 若是定義了html, 將忽略text
  • attachments 附件內容

熟悉了以上配置以後咱們基本能夠配置知足80%場景的郵件發送需求了. 這裏咱們來看一個設置Message的簡單案例:

await transporter.sendMail({
  from: '"v6.dooring" <dooring2021@163.com>', // sender address
  to: 'xujiang156@qq.com', // list of receivers
  subject: 'welcome to use dooring', // Subject line
  text: 'Hello world?', // plain text body
  html: `歡迎註冊v6.dooring, 您的郵箱驗證碼是:<b>${emailCode}</b>`, // html body
})
複製代碼

該案例是使用dooring郵箱給一個普通用戶發送郵箱驗證碼的場景, 是否是很熟悉呢? 這個場景目前被應用在不少登陸註冊相關的場景中. 接下來看看實際的效果:

擴展

咱們利用Nodemailer能夠開發不少有意思的產品, 好比:

  • 在線郵箱客戶端
  • 定製郵箱模版
  • 郵箱驗證中樞系統
  • 郵箱羣發助手

等等. 關於第二個應用場景, 目前開源有不少漂亮的郵箱模版, 好比

最後

目前筆者也在持續更新H5編輯器 H5-Dooring, 近期更新以下:

  • 添加省市級聯組件
  • 添加批量導入 excel 數據的能力
  • 添加表單自定義校驗
  • 音頻組件添加自動播放控制, 循環播放等配置項
  • 添加橫向滑動組件
  • 增長表單設計器的文件上傳功能
  • 增長大轉盤抽獎組件
  • 增長九宮格抽獎組件
  • 增長組件權限控制
  • 增長圖片庫自定義上傳功能

以爲有用 ?喜歡就收藏,順便點個吧,你的支持是我最大的鼓勵!微信搜 「趣談前端」,發現更多有趣的H5遊戲, webpack,node,gulp,css3,javascript,nodeJS,canvas數據可視化等前端知識和實戰.

相關文章
相關標籤/搜索