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。
- 創建項目:
mkdir emailtest cd emailtest
- 創建package.json:
{ "name": "emailtest", "type": "module", "main": "index.js", "dependencies": { "nodemailer": "^6.0.0" } }
- 安裝NodeMailer:
npm install
- 編寫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中文網其他相關文章!

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。