1,Nodemailer簡介html
Nodemailer是一個簡單易用的Node.js郵件發送插件前端
github地址node
Nodemailer的主要特色包括:jquery
常見發郵件的字段:git
郵件內容使用UTF-8格式,附件使用二進制流。github
附件對象包含了下面這些屬性:web
2,emailjs簡介ajax
emailjs是一個簡單易用的Node.js郵件發送插件npm
1 npm install emailjs --save
下面講的主要是Nodemailer發送郵件,畢竟星比較多嘛json
電子郵件是—種用電子手段提供信息交換的通訊方式,是互聯網應用最廣的服務。經過網絡的電子郵件系統,用戶能夠以很是低廉的價格(無論發送到哪裏,都只需負擔網費)、很是快速的方式(幾秒鐘以內能夠發送到世界上任何指定的目的地),與世界上任何一個角落的網絡用戶聯繫。
在不少項目中,咱們都會遇到郵件註冊,郵件反饋等需求。在node中收發電子郵件也很是簡單,由於強大的社區有各類各樣的包能夠供我麼直接使用。
主要講的是Nodemailer發送郵件
第一步:安裝Nodemailer
1 npm install nodemailer --save
第二步:配置參數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 }
安裝插件
1 npm install nodemailer-smtp-transport --save
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