nodejs郵件模塊nodemailer的使用說明javascript
1.介紹 css
nodemailer是node的一個發送郵件的組件,其功能至關強大,普通郵件,傳送附件,郵件加密等等都能實現,並且操做也十分方便。html
nodemailer在GitHub上的項目地址爲https://github.com/andris9/Nodemailerjava
本文將說明如何使用163郵箱發送郵件,因爲所學疏淺,這裏純屬拋磚引玉,有什麼問題或好的建議還請補充。node
2.示例git
2.1.準備github
新建一個項目nodesend,並安裝依賴包,設置app.js啓動,修改ejs模板支持html。json
2.2修改前臺界面app
修改view目錄下的index.ejs爲index.html,並從新編寫界面。本次前臺界面嘗試用表單提交方式。示例代碼以下: post
<!DOCTYPE html> <html> <head> <title>Nodejs之發送郵件nodemailer</title> <link rel='stylesheet' href='/stylesheets/style.css'/> </head> <body> <div style="text-align: center"> <% if(typeof(message) !== 'undefined' && message){ %> <div> <% if(message.match("成功")){ %> <p style="color: #0effa5;"><%= message %></p> <% } else { %> <p style="color: #ff0000;"><%= message %></p> <% } %> </div> <% } %> <form id='mailsend' action='/mails' method='post'> <div> <label for='mail'>郵箱地址</label> <input id='mail' name='mailaddress' type='text'/> <input type='submit' value='Send'/> </div> </form> </div> </body> </html>
完成後界面風格:
2.3配置路由
在app.js中,有以下代碼,這裏再也不修改,直接根據請求修改routes目錄下的index.js文件。
app.use('/', routes); app.use('/users', users);
打開index.js文件,添加路由方法尋找控制檯。
router.post('/mails', nodemail.sendmail);
添加完成後,在nodemail.js文件中,添加sendmaill方法。
2.4實現操做處理
打開nodemail.js文件,導入發送郵件模塊,並添加判斷方法:
判斷郵件地址是否爲空,郵件地址是否合法,發送郵件等。
var nodemailer = require('nodemailer'); exports.sendmail = function (req, res, next) { var mail = req.body.mailaddress; //檢測郵箱地址是否爲空 if (!mail) { return res.render("index", {message: "請輸入郵箱地址!"}); } //檢測郵箱地址是否符合規範 var reg = /^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*@([A-Za-z0-9]+[-.])+[A-Za-z0-9]{2,5}$/; if (!mail.match(reg)) { return res.render("index", {message: "郵箱地址不符合規範,請從新輸入!"}); } //郵件發送 var transporter = nodemailer.createTransport({ service: '163', auth: { user: '',//你的163郵箱帳號 pass: ''//你的163郵箱密碼 } }); var mailOptions = { from: '', // sender address to:mail, // list of receivers subject: '測試郵件', // Subject line text: 'Nodejs之郵件發送', // plaintext body html:"<h2>歡迎關注個人GitHub,一塊兒學習Nodejs。https://github.com/Chen-xy</h2>" }; transporter.sendMail(mailOptions, function(error, info){ if(!error){ return res.render("index", {message: "郵件發送成功,請注意查收!"}); }else{ console.log(error); return res.render("index", {message: "郵件發送失敗,請稍後重試!"}); } }); };
其中:
transporter:填寫郵箱配置,使用的郵箱名稱及帳號密碼等。
mailOptions:填寫郵件內容,發件人,收件人,標題,內容,附件等等。
最後,判斷,返回。
3.補充說明
3.1:
根據簡單的示例能夠看出,node的實現過程是:
前臺界面----->項目入口app.js------>根據請求方式,找到路由routes------->根據處理方式,找到實現方法controllers------>添加方法實現。
基本上全部的項目都是按照這個思路來走,因此,只需按照代碼實現思路便可。
3.2:
這裏第一次嘗試使用form表單提交的方式,同時使用了ejs,因此有些地方不免實現處理的不是很好,像頁面中郵箱的格式判斷等均可以交給js界
面來實現,應該會節省一些時間,以前有考慮過使用js,然而表單提交時監聽onsubmit事件時,雖然能觸發,可是表單仍是提交了,因此,這個問題
就先放在這,感興趣的能夠本身嘗試。
3.3:
郵件發送時由於還有一個郵箱響應的一個因素,因此不一樣的郵箱可能會有不一樣的處理時長,我試驗時,163郵箱的處理速度可能比QQ的會慢一些。
另外,使用郵箱時都須要在郵箱設置中開啓SMTP服務,QQ郵箱在開啓時可能還需設置獨立的郵箱密碼。
3.4:
很差意思,補充的太多了,可是我仍是要說。
nodemailer的配置中並無添加對163郵箱或其餘一些郵箱的支持,前期我嘗試使用163郵箱時也老是失敗,後來摸索了好久才終於成功。
nodemailer的配置文件如圖所示:
其中services.json就是,在其中添加上163郵箱的配置便可,本項目代碼示例中已添加。可直接上GitHub上查看或下載。
3.5:
這篇博客寫起來,包括項目搭建,調試,組織語言,用了整整一上午的時間,真的真的,,不想再說了,若是你們以爲寫的還好,還請多多鼓勵支持。
有問題能夠留言。
代碼示例地址:https://github.com/Chen-xy/mailsend
其它的沒了,之後想起來了,會補充。