node.js發(fā)送郵件email的方法詳解
本文實例講述了node.js發(fā)送郵件email的方法。分享給大家供大家參考,具體如下:
通常我們做node項目時,可能我們會碰到做一個簡單的郵件反饋,那么我們今天就來討論一下,其中遇到的各種坑。
總的來說做這個東西,我們可能需要node第三方依賴模塊,來實現(xiàn)我們要達到的效果。
這里我推薦兩個模塊:https://github.com/pingfanren/Nodemailer
npm install nodemailer //這個模塊不錯,github上星也比較多,還經(jīng)常有維護,但是坑也比較多
另一個,https://github.com/eleith/emailjs
npm install emailjs --save
這里我用的是nodemailer模塊,畢竟用的人比較多,跟隨主流呢
它的特點:
使用Unicode編碼
支持Windows系統(tǒng),不需要安裝依賴
支持純文本和HTML格式
支持發(fā)送附件(包括大型附件)
在HTML中嵌入圖片
支持SSL/STARTTLS安全協(xié)議
不同的傳輸方法,可以使用內(nèi)置也可以使用外部插件的形式
提供自定義插件支持(比如增加DKIM簽名,使用markdown代替HTML等等)
支持XOAUTH2登錄驗證(以及關(guān)于更新的令牌反饋)
安裝使用
npm install nodemailer --save
使用內(nèi)置傳輸發(fā)送郵件,可以查看支持列表:https://github.com/andris9/nodemailer-wellknown#supported-services
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
//https://github.com/andris9/nodemailer-wellknown#supported-services 支持列表
service: 'qq',
port: 465, // SMTP 端口
secureConnection: true, // 使用 SSL
auth: {
user: '768065158@qq.com',
//這里密碼不是qq密碼,是你設(shè)置的smtp密碼
pass: '*****'
}
});
// NB! No need to recreate the transporter object. You can use
// the same transporter object for all e-mails
// setup e-mail data with unicode symbols
var mailOptions = {
from: '768065158@qq.com', // 發(fā)件地址
to: '528779822@qq.com', // 收件列表
subject: 'Hello sir', // 標題
//text和html兩者只支持一種
text: 'Hello world ?', // 標題
html: '<b>Hello world ?</b>' // html 內(nèi)容
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
發(fā)送郵件成功以后我們很少會有操作,但也有極少數(shù)情況需要在成功以后會處理一些特殊信息的,這時候info對象就能發(fā)揮余熱了。info對象中包含了messageId、envelop、accepted和response等屬性,具體看文檔我不一一介紹了。
使用其他傳輸插件 https://github.com/andris9/nodemailer-smtp-transport
npm install nodemailer-smtp-transport --save
其他代碼類似,差別只是在創(chuàng)建transport上,所以這里我就寫一部分代碼:
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
// 開啟一個 SMTP 連接池
var transport = nodemailer.createTransport(smtpTransport({
host: "smtp.qq.com", // 主機
secure: true, // 使用 SSL
secureConnection: true, // 使用 SSL
port: 465, // SMTP 端口
auth: {
user: "gaolu19901228@qq.com", // 賬號
pass: "******" // 密碼
}
}));
// 設(shè)置郵件內(nèi)容
var mailOptions = {
from: "768065158<768065158@qq.com>", // 發(fā)件地址
to: "528779822@qq.com", // 收件列表
subject: "Hello world", // 標題
text:"hello",
html: "<b>thanks a for visiting!</b> 世界,你好!" // html 內(nèi)容
}
// 發(fā)送郵件
transport.sendMail(mailOptions, function(error, response) {
if (error) {
console.error(error);
} else {
console.log(response);
}
transport.close(); // 如果沒用,關(guān)閉連接池
});
下面列出了一些發(fā)郵件的字段:
from 發(fā)送者郵箱
sender 發(fā)送者區(qū)域顯示的信息
to 接收者郵箱
cc 抄送者郵箱
bcc 密送者郵箱
subject 郵箱主題
attachments 附件內(nèi)容
watchHtml apple watch指定的html版本
text 文本信息
html html內(nèi)容
headers 另加頭信息
encoding 編碼格式
郵件內(nèi)容使用UTF-8格式,附件使用二進制流。
附件
附件對象包含了下面這些屬性:
filename 附件名
content 內(nèi)容
encoding 編碼格式
path 文件路徑
contentType 附件內(nèi)容類型
常見錯誤
1.賬號未設(shè)置該服務(wù)
{ [AuthError: Invalid login - 454 Authentication failed, please open smtp flag first!]
name: 'AuthError',
data: '454 Authentication failed, please open smtp flag first!',
stage: 'auth' }
解決方案:
QQ郵箱 -> 設(shè)置 -> 帳戶 -> 開啟服務(wù):POP3/SMTP服務(wù)
2.發(fā)件賬號與認證賬號不同
{ [SenderError: Mail from command failed - 501 mail from address must be same as authorization user]
name: 'SenderError',
data: '501 mail from address must be same as authorization user',
stage: 'mail' }
3.登錄認證失敗,可能由于smpt獨立密碼錯誤導(dǎo)致 我在qq設(shè)置的時候就遇到過
Invalid login - 535 Authentication failed
解決方案:
qq郵箱在測試smtp郵件服務(wù)器時,一,在qq郵箱,設(shè)置,賬戶設(shè)置中.開啟下smtp.二,設(shè)置一下獨立密碼.三,在配置smtp服務(wù)器的密碼時,注意一定要填你設(shè)置的獨立密碼.不要用郵箱登錄密碼.否則會提示535 Authentication failed錯誤.
希望本文所述對大家nodejs程序設(shè)計有所幫助。
相關(guān)文章
Node.js之構(gòu)建WebSocket服務(wù)全過程
這篇文章主要介紹了Node.js之構(gòu)建WebSocket服務(wù)全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09
使用ExcelJS快速處理Node.js爬蟲數(shù)據(jù)
Excel.js是一個強大的JavaScript庫,它提供了方法處理Excel文件,例如創(chuàng)建和編輯工作簿、讀取和寫入數(shù)據(jù)、處理行和列、設(shè)置樣式、導(dǎo)入和導(dǎo)出數(shù)據(jù)等,本文介紹使用ExcelJS快速處理Node.js爬蟲數(shù)據(jù)的方法,一起看看吧2024-01-01
Node 創(chuàng)建第一個服務(wù)器應(yīng)用的操作方法
Node.js是一個基于Chrome V8引擎的JavaScript運行環(huán)境,可以用于構(gòu)建高性能的網(wǎng)絡(luò)應(yīng)用程序,它采用事件驅(qū)動、非阻塞I/O模型,使得程序可以以高效地方式處理并發(fā)請求,這篇文章主要介紹了Node 創(chuàng)建第一個服務(wù)器應(yīng)用,需要的朋友可以參考下2024-02-02
node+express+ejs使用模版引擎做的一個示例demo
本篇文章主要介紹了node+express+ejs使用模版引擎做的一個示例demo,具有一定參考價值,有興趣的小伙伴可以了解一下2017-09-09
Express服務(wù)器端代碼熱加載的實現(xiàn)代碼
這篇文章主要介紹了Express服務(wù)器端代碼熱加載的實現(xiàn),文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習或工作有一定的幫助,需要的朋友可以參考下2024-01-01
nodejs命令行參數(shù)處理模塊commander使用實例
這篇文章主要介紹了nodejs命令行參數(shù)處理模塊commander使用實例,commander是一個非常高大上的令行參數(shù)處理模塊,需要的朋友可以參考下2014-09-09
nodejs做個爬蟲爬取騰訊動漫內(nèi)容簡單實現(xiàn)
這篇文章主要為大家介紹了nodejs做個爬蟲爬取騰訊動漫內(nèi)容簡單實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07

