首頁 > web前端 > js教程 > 使用node.js發送電子郵件

使用node.js發送電子郵件

Christopher Nolan
發布: 2025-02-08 12:24:09
原創
190 人瀏覽過

Sending Email Using Node.js

Node.js郵件發送指南:使用NodeMailer發送和接收郵件

本文將指導您如何使用Node.js發送和接收郵件,並解決常見問題。 NodeMailer是流行的npm模塊,每週下載量超過三百萬次,但需要SMTP服務器支持。

核心要點:

  • NodeMailer是Node.js應用發送郵件最常用的npm模塊,每週下載量超過三百萬次,需要SMTP服務器。
  • 由於不同郵件客戶端的渲染引擎和限制各異,製作兼容各種客戶端的HTML郵件頗具挑戰性。預製模板、設計工具和郵件標記語言等工具和資源可以簡化流程。
  • 為確保可靠性,建議將郵件數據發送到任務隊列,而不是直接在Node.js應用程序中發送郵件。這樣,用戶可以在處理郵件時繼續使用應用程序。
  • 使用ImapFlow等模塊可以在Node.js應用程序中讀取收到的郵件,這對於處理服務註冊、取消訂閱請求、自動化支持等非常有用。

發送郵件

大多數Web應用程序都需要發送郵件,例如註冊、密碼重置、狀態報告以及完整的營銷活動(如新聞通訊和促銷活動)。本教程講解如何在Node.js中發送郵件,其中的概念和挑戰也適用於其他系統。

您可以在npm上找到許多與電子郵件相關的模塊。最受歡迎的是NodeMailer。

使用NodeMailer需要一個SMTP服務器來發送郵件。您可以使用自己的電子郵件提供商,但本演示使用免費的WPOven Test SMTP Server。

  1. 創建項目:
mkdir emailtest
cd emailtest
登入後複製
登入後複製
  1. 創建package.json:
{
  "name": "emailtest",
  "type": "module",
  "main": "index.js",
  "dependencies": {
    "nodemailer": "^6.0.0"
  }
}
登入後複製
登入後複製
  1. 安裝NodeMailer:
npm install
登入後複製
  1. 編寫index.js:
import nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({
  host: 'smtp.freesmtpservers.com',
  port: 25
});

try {
  const send = await transporter.sendMail({
    from: '"测试邮件" <test@email.com>',
    to: 'your_email@example.com',
    subject: '你好!',
    text: '你好,世界!',
    html: '<p>你好,世界!</p>',
  });

  console.dir(send, { depth: null, color: true });
} catch (e) {
  console.dir(e, { depth: null, color: true });
}
登入後複製

(請將to:地址更改為您自己的郵箱地址)

運行代碼後,您應該會看到包含250 OK響應和messageId的結果。在WPOven Test SMTP Server頁面輸入您的郵箱地址,點擊“Access Inbox”,查看“你好!”郵件。

NodeMailer基礎

要發送郵件,您必須創建一個NodeMailer transporter 對象來定義服務類型。 SMTP是最常見的,但其他服務也可用。通常需要身份驗證用戶ID和密碼:

import nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({
  host: 'smtp.yourserver.com',
  port: 587,
  auth: {
    user: 'myid@yourserver.com',
    pass: 'my-password'
  },
});
登入後複製

您可以使用transporter的sendMail()方法向一個或多個收件人發送郵件:

const send = await transporter.sendMail({
  from: '"测试邮件" <test@email.com>',
  to: 'someone@example.com, sometwo@example.com',
  cc: 'somethree@example.com',
  bcc: 'somefour@example.com',
  subject: '你好!',
  text: '纯文本邮件内容',
  html: '<p>HTML邮件内容</p>',
});
登入後複製

所有郵件客戶端都支持純文本消息。當郵件客戶端支持HTML時,您還可以發送相同消息的富格式版本(詳情見下文)。

NodeMailer提供了許多其他消息選項,但最常見的是附件。一個對像數組定義文件名和內容。例如:

mkdir emailtest
cd emailtest
登入後複製
登入後複製

發送服務及異步架構

雖然發送單個郵件通常很快,但SMTP服務器可能宕機需要重試,或者郵件可能卡在批量郵件發送的中間。

最好將數據發送到任務隊列,而不是直接在Node.js應用程序中發送郵件。最終用戶無需等待響應,可以繼續使用應用程序。另一個進程可以監控郵件隊列,發送下一條郵件,並在發生故障時重新排隊項目。

製作HTML郵件

HTML5和CSS3在現代瀏覽器中運行良好,但郵件客戶端則不然。您將面臨以下問題:

  • 各種郵件客戶端渲染引擎不同。
  • 大多數客戶端會阻止或限製字體、圖像、跟踪器、媒體查詢、iframe、視頻、音頻、表單和腳本。
  • 郵件客戶端可能會重新格式化您的HTML。

手動編寫HTML郵件很困難。建議使用以下工具和資源:

  • 預製郵件模板: Codedmails, Campaign Monitor templates, Litmus email templates, Stripo templates 等。
  • 郵件模板設計工具: Beefree, Blocks Edit, Campaign Monitor, Chamaileon 等。
  • 郵件模板轉換工具: Premailer, alter.email, email-comb 等。
  • 郵件模板標記工具: Cerberus, Email Framework, Email Skeleton, Good Email Code, HEML, MJML, Maizzle 等。
  • 郵件測試工具: HTML Email Check, MailTrap, emailpreview, Mailosaur, Email Preview Services, Litmus, Email on Acid 等。

讀取收到的郵件

大多數應用程序只需要發送郵件,但有時您可能需要檢查收到的郵件(例如服務註冊、取消訂閱處理、自動化支持等)。雖然超出了本教程的範圍,但ImapFlow等Node.js模塊允許您的應用程序連接到IMAP收件箱,獲取郵件並處理響應:

{
  "name": "emailtest",
  "type": "module",
  "main": "index.js",
  "dependencies": {
    "nodemailer": "^6.0.0"
  }
}
登入後複製
登入後複製

結論

從Node.js Web應用程序發送郵件很容易,但發送在所有郵件客戶端中都能正常顯示、可靠運行且不會導致垃圾郵件問題的郵件則要困難得多。建議您從簡單的純文本郵件開始。

常見問題解答

(此處省略了原文檔中冗長的FAQ部分,因為這些問題在上面已經基本涵蓋了。如有需要,可以根據具體問題補充。)

以上是使用node.js發送電子郵件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板