Nodejs之發送郵件nodemailer


nodejs郵件模塊nodemailer的使用說明

1.介紹 

    nodemailer是node的一個發送郵件的組件,其功能相當強大,普通郵件,傳送附件,郵件加密等等都能實現,而且操作也十分方便。

nodemailer在GitHub上的項目地址為https://github.com/andris9/Nodemailer

    本文將說明如何使用163郵箱發送郵件,由於所學疏淺,這里純屬拋磚引玉,有什么問題或好的建議還請補充。

 

2.示例

     2.1.准備

     新建一個項目nodesend,並安裝依賴包,設置app.js啟動,修改ejs模板支持html。

     2.2修改前台界面

     修改view目錄下的index.ejs為index.html,並重新編寫界面。本次前台界面嘗試用表單提交方式。示例代碼如下:                                       

<!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

    其它的沒了,以后想起來了,會補充。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM