我們將使用 nodemailer 庫來發送帶有附件的郵件。
首先,確保已經安裝了nodemailer。如果沒有安裝,可以通過
npm install nodemailer 來安裝。
cnpm install nodemailer --save
dependencies:
– nodemailer ^7.0.3
步驟:
- 引入nodemailer模塊。
- 創建傳輸器(transporter)對象,用于發送郵件。需要配置SMTP服務(這里以QQ郵箱為例,也可以使用其他服務)。
- 設置郵件選項(mailOptions),包括發件人、收件人、主題、正文以及附件。
- 使用 transporter.sendMail 方法發送郵件,并處理回調。
注意:使用QQ郵箱 SMTP 服務需要開啟 POP3/SMTP服務,并生成授權碼(不是郵箱密碼)。
以下是一個使用 Node.js 發送帶附件郵件的完整示例,使用 nodemailer
庫實現:
// send_email_1.js 發送一封帶有附件的郵件
const nodemailer = require('nodemailer');
const path = require('path');// 創建 SMTP 傳輸器(以QQ郵箱為例,其他郵箱配置類似)
const transporter = nodemailer.createTransport({host: 'smtp.qq.com', // QQ郵箱SMTP服務器port: 465, // SSL端口secure: true, // 使用SSLauth: {user: 'your_email@qq.com', // 替換為你的郵箱pass: 'your_auth_code' // 替換為郵箱授權碼(不是密碼)}
});// 郵件配置
const mailOptions = {from: '"發件人名稱" <your_email@qq.com>', // 發件人to: 'recipient@example.com', // 收件人subject: '帶附件的測試郵件', // 郵件主題text: '這是一封包含附件的測試郵件', // 純文本正文html: '<b>這是一封包含附件的測試郵件</b>', // HTML正文attachments: [ // 附件列表{filename: 'document.pdf', // 附件顯示名稱path: path.join(__dirname, 'files/document.pdf') // 附件路徑},{filename: 'image.png',path: path.join(__dirname, 'files/image.png'),cid: 'unique-image-id' // 用于在HTML中嵌入圖片}]
};// 發送郵件
transporter.sendMail(mailOptions, (error, info) => {if (error) {return console.log('發送失敗:', error);}console.log('郵件已發送: %s', info.messageId);
});
使用說明:
-
安裝依賴:
npm install nodemailer
-
郵箱配置:
- 使用 QQ 郵箱需要開啟 SMTP 服務并獲取授權碼(登錄QQ郵箱 → 設置 → 賬戶 → 開啟POP3/SMTP → 生成授權碼)
- 其他郵箱(Gmail、163等)配置參考:
// Gmail 示例 host: 'smtp.gmail.com', port: 465, secure: true, auth: {user: 'your@gmail.com',pass: 'your-app-password' // 需使用Google應用專用密碼 }
-
附件配置:
filename
:收件人看到的文件名path
:本地文件路徑(絕對路徑推薦)cid
:用于在HTML內容中引用圖片(如<img src="cid:unique-image-id">
)
-
運行程序:
node send_email_1.js
常見問題解決:
-
認證失敗:
- 確認郵箱服務已開啟SMTP
- 使用授權碼而非郵箱密碼
- Gmail需要開啟兩步驗證并創建應用專用密碼
-
附件大小限制:
- 大多數郵箱服務商限制附件大小(QQ郵箱≤50MB)
- 超大附件建議使用云存儲鏈接
-
安全警告:
- 首次登錄可能觸發安全警告,需在郵箱中確認
- Gmail需開啟"低安全性應用訪問"(不推薦)或使用OAuth2
進階使用(HTML內容嵌入圖片):
<html><body><p>這是一封帶圖片附件的郵件:</p><!-- 使用 cid 引用附件圖片 --><img src="cid:unique-image-id" alt="嵌入圖片"></body>
</html>
提示:生產環境建議將郵箱配置存儲在環境變量中(使用
dotenv
庫),避免敏感信息泄露。
完整文檔參考:nodemailer官方文檔