Node.js郵件發送指南:使用NodeMailer發送和接收郵件
本文將指導您如何使用Node.js發送和接收郵件,並解決常見問題。 NodeMailer是流行的npm模塊,每週下載量超過三百萬次,但需要SMTP服務器支持。
核心要點:
發送郵件
大多數Web應用程序都需要發送郵件,例如註冊、密碼重置、狀態報告以及完整的營銷活動(如新聞通訊和促銷活動)。本教程講解如何在Node.js中發送郵件,其中的概念和挑戰也適用於其他系統。
您可以在npm上找到許多與電子郵件相關的模塊。最受歡迎的是NodeMailer。
使用NodeMailer需要一個SMTP服務器來發送郵件。您可以使用自己的電子郵件提供商,但本演示使用免費的WPOven Test SMTP Server。
mkdir emailtest cd emailtest
{ "name": "emailtest", "type": "module", "main": "index.js", "dependencies": { "nodemailer": "^6.0.0" } }
npm install
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在現代瀏覽器中運行良好,但郵件客戶端則不然。您將面臨以下問題:
手動編寫HTML郵件很困難。建議使用以下工具和資源:
讀取收到的郵件
大多數應用程序只需要發送郵件,但有時您可能需要檢查收到的郵件(例如服務註冊、取消訂閱處理、自動化支持等)。雖然超出了本教程的範圍,但ImapFlow等Node.js模塊允許您的應用程序連接到IMAP收件箱,獲取郵件並處理響應:
{ "name": "emailtest", "type": "module", "main": "index.js", "dependencies": { "nodemailer": "^6.0.0" } }
結論
從Node.js Web應用程序發送郵件很容易,但發送在所有郵件客戶端中都能正常顯示、可靠運行且不會導致垃圾郵件問題的郵件則要困難得多。建議您從簡單的純文本郵件開始。
常見問題解答
(此處省略了原文檔中冗長的FAQ部分,因為這些問題在上面已經基本涵蓋了。如有需要,可以根據具體問題補充。)
以上是使用node.js發送電子郵件的詳細內容。更多資訊請關注PHP中文網其他相關文章!