
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 2 | mkdir emailtest
cd emailtest
|
登入後複製
登入後複製
- 創建package.json:
1 2 3 4 5 6 7 8 | {
"name" : "emailtest" ,
"type" : "module" ,
"main" : "index.js" ,
"dependencies" : {
"nodemailer" : "^6.0.0"
}
}
|
登入後複製
登入後複製
- 安裝NodeMailer:
- 編寫index.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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和密碼:
1 2 3 4 5 6 7 8 9 10 | import nodemailer from 'nodemailer' ;
const transporter = nodemailer.createTransport({
host: 'smtp.yourserver.com' ,
port: 587,
auth: {
user: 'myid@yourserver.com' ,
pass: 'my-password'
},
});
|
登入後複製
您可以使用transporter的sendMail()
方法向一個或多個收件人發送郵件:
1 2 3 4 5 6 7 8 9 | 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提供了許多其他消息選項,但最常見的是附件。一個對像數組定義文件名和內容。例如:
1 2 | 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收件箱,獲取郵件並處理響應:
1 2 3 4 5 6 7 8 | {
"name" : "emailtest" ,
"type" : "module" ,
"main" : "index.js" ,
"dependencies" : {
"nodemailer" : "^6.0.0"
}
}
|
登入後複製
登入後複製
結論
從Node.js Web應用程序發送郵件很容易,但發送在所有郵件客戶端中都能正常顯示、可靠運行且不會導致垃圾郵件問題的郵件則要困難得多。建議您從簡單的純文本郵件開始。
常見問題解答
(此處省略了原文檔中冗長的FAQ部分,因為這些問題在上面已經基本涵蓋了。如有需要,可以根據具體問題補充。)
以上是使用node.js發送電子郵件的詳細內容。更多資訊請關注PHP中文網其他相關文章!