NodeJs之郵件(email)發送

NodeJs之郵件(email)發送

一,介紹與需求

 1.1,介紹

1,Nodemailer簡介html

Nodemailer是一個簡單易用的Node.js郵件發送插件前端

github地址node

Nodemailer的主要特色包括:jquery

    • 支持Unicode編碼
    • 支持Window系統環境,不須要安裝依賴
    • 支持HTML內容和普通文本text內容
    • 支持附件(傳送大附件)
    • 支持HTML內容中嵌入圖片
    • 支持SSL/STARTTLS安全的郵件發送
    • 支持內置的transport方法和其餘插件實現的transport方法
    • 支持自定義插件處理消息
    • 支持XOAUTH2登陸驗證

常見發郵件的字段:git

    • from 發送者郵箱
    • sender 發送者區域顯示的信息
    • to 接收者郵箱
    • cc 抄送者郵箱
    • bcc 密送者郵箱
    • subject 郵箱主題
    • attachments 附件內容
    • watchHtml apple watch指定的html版本
    • text 文本信息
    • html html內容
    • headers 另加頭信息
    • encoding 編碼格式

  郵件內容使用UTF-8格式,附件使用二進制流。github

  附件

  附件對象包含了下面這些屬性:web

    • filename 附件名
    • content 內容
    • encoding 編碼格式
    • path 文件路徑
    • contentType 附件內容類型 

2,emailjs簡介ajax

emailjs是一個簡單易用的Node.js郵件發送插件npm

1 npm install emailjs  --save

下面講的主要是Nodemailer發送郵件,畢竟星比較多嘛json

 1.2,需求

電子郵件是—種用電子手段提供信息交換的通訊方式,是互聯網應用最廣的服務。經過網絡的電子郵件系統,用戶能夠以很是低廉的價格(無論發送到哪裏,都只需負擔網費)、很是快速的方式(幾秒鐘以內能夠發送到世界上任何指定的目的地),與世界上任何一個角落的網絡用戶聯繫。

在不少項目中,咱們都會遇到郵件註冊,郵件反饋等需求。在node中收發電子郵件也很是簡單,由於強大的社區有各類各樣的包能夠供我麼直接使用。

二,配置使用

主要講的是Nodemailer發送郵件

第一步:安裝Nodemailer

1 npm install nodemailer --save

第二步:配置參數xml

在settingConfig.xml添加以下:
1  <?xml version="1.0" encoding="utf-8" ?>
2  <appSettings>
3    <add key="smtp" value="smtp.qq.com"/>
4    <!-- 配置服務 smtp.exmail.qq.com//企業郵箱 非qq; -->
5    <add key="mailFrom" value="*@qq.com"/>
6   <!--配置發送郵箱 -->
7    <add key="mailPwd" value="v567jvsvqajos67e"/>
8   <!--smtp受權碼 -->
9  </appSettings>

第三步:封裝發送郵件方法

使用內置傳輸的方式發送郵件,在sendEmail.js添加以下代碼:

 1 var nodemailer = require("nodemailer");
 2 var settingConfig = require('../config/settingConfig.js');//解析參數
 3 
 4 var smtp = settingConfig.getValueByKey("smtp");
 5 var mailFrom = settingConfig.getValueByKey("mailFrom");
 6 var mailPwd = settingConfig.getValueByKey("mailPwd");
 7 
 8 function emailTo(email,subject,text,html,callback) {
 9     var transporter = nodemailer.createTransport({
10         host: smtp,
11         auth: {
12             user: mailFrom,
13             pass: mailPwd //受權碼,經過QQ獲取  
14 
15         }
16     });
17     var mailOptions = {
18         from: mailFrom, // 發送者  
19         to: email, // 接受者,能夠同時發送多個,以逗號隔開  
20         subject: subject, // 標題  
21     };
22     if(text != undefined)
23     {
24         mailOptions.text =text;// 文本  
25     }
26     if(html != undefined)
27     {
28         mailOptions.html =html;// html  
29     }
30 
31     var result = {
32         httpCode: 200,
33         message: '發送成功!',
34     }
35     try {
36         transporter.sendMail(mailOptions, function (err, info) {
37             if (err) {
38                 result.httpCode = 500;
39                 result.message = err;
40                 callback(result);
41                 return;
42             }
43             callback(result);
44         });
45     } catch (err) {
46         result.httpCode = 500;
47         result.message = err;
48         callback(result);
49     }
50     
51 }

使用其餘傳輸插件  https://github.com/andris9/nodemailer-smtp-transport

安裝插件

1 npm install nodemailer-smtp-transport  --save

其餘代碼相似,差異只是在建立transport上,因此這裏我就寫一部分代碼:

 1 var nodemailer = require('nodemailer');
 2 var smtpTransport = require('nodemailer-smtp-transport');
 3 
 4 function emailTo(email,subject,text,html,callback) {
 5 // 開啓一個 SMTP 鏈接池
 6     var transporter = nodemailer.createTransport(smtpTransport({
 7         host: smtp,//主機
 8         secure: true, // 使用 SSL
 9         secureConnection: true, // 使用 SSL
10         port: 465, // SMTP 端口
11         auth: {
12             user: mailFrom,
13             pass: mailPwd //受權碼,經過QQ獲取  
14 
15         }
16     }));
17     var mailOptions = {
18         from: mailFrom, // 發送者  
19         to: email, // 接受者,能夠同時發送多個,以逗號隔開  
20         subject: subject, // 標題  
21     };24         mailOptions.text =text;// 文本  30 
31     var result = {
32         httpCode: 200,
33         message: '發送成功!',
34         data: [],
35     }
36     try {
37         transporter.sendMail(mailOptions, function (err, info) {
38             if (err) {
39                 result.httpCode = 500;
40                 result.message = err;
41                 callback(result);
42                 return;
43             }
44             callback(result);
45         });
46     } catch (err) {
47         result.httpCode = 500;
48         result.message = err;
49         callback(result);
50     }
51     transport.close(); // 若是沒用,關閉鏈接池
52     
53 }

第四步:發送郵件接口

在sendEmailApi.js添加以下代碼:

 1 var mailer = require('../services/sendEmail.js');
 2 router.post("/SendEmail", function (req, res) {
 3     var email = req.body.email;
 4     var subject = "影琪通知";//標題
 5     var text =undefined;
 6     var html = "<p>你好</p><p>歡迎訪問jackson影琪</p><p>點擊下面連接進入訪問吧:</p><p><a href='https://www.cnblogs.com/jackson-zhangjiang/'>https://www.cnblogs.com/jackson-zhangjiang/</a></p>";;
 7     mailer.emailTo(email, subject, text, html, function (data) {
 8         res.status(data.httpCode).json(data);
 9     })
10 })

第五步:拋出發送郵件接口

在app.js添加以下代碼:

1 app.use("/api", require("./sendEmailApi.js"));

第六步:web前端調用

採用jquery的方式,使用ajax

 1  sendEmail: function (email, callBack) {
 2          var datajson = {
 3              "email": email
 4          };
 5          $.ajax({
 6              url: 'http://127.0.0.1:3000/api/' + 'SendEmail',
 7              type: "POST",
 8              dataType: "json",
 9              xhrFields: {
10                  withCredentials: true
11              },
12              crossDomain: true,
13              data: datajson,
14              success: function (data) {
15                  callBack(data);
16              },
17              error: function (err) {
18                  console.log(err);
19              }
20          });
21      }

第七步:效果

三,常見問題

 1.帳號未設置該服務

1 { [AuthError: Invalid login - 454 Authentication failed, please open smtp flag first!]
2   name: 'AuthError',
3   data: '454 Authentication failed, please open smtp flag first!',
4   stage: 'auth' }

解決方案:QQ郵箱 -> 設置 -> 賬戶 -> 開啓服務:POP3/SMTP服務

 2.登陸認證失敗,可能因爲smpt受權碼/獨立密碼錯誤致使

1 Invalid login - 535 Authentication failed 

解決方案:

qq郵箱在測試smtp郵件服務器時,

一,在qq郵箱,設置,帳戶設置中.開啓下smtp.

二,獲取受權碼.

三,在配置smtp服務器的密碼時,注意必定要填你得到的受權碼.不要用郵箱登陸密碼.不然會提示535 Authentication failed錯誤.

 3.權限認證失敗,可能因爲受權碼錯誤致使,或者發件服務器不對應 我在qq設置的時候就遇到過

解決方案:登陸Foxmail,查看發件服務器是什麼?我QQ郵箱發件服務器是smtp.qq.com,企業郵箱是:smtp.exmail.qq.com

相關文章
相關標籤/搜索