# **163郵箱為例**
## 郵箱開通授權

## **后端**
### **依賴**
```
npm i nodemailer --save
```
### **創建發送郵件公共方法**
在util問價加下新增mail.js文件
```
const nodemailer = require("nodemailer"); //引入依賴
/**
* 發送郵件
* @param {string} to 收件方郵箱
* @param {string} title 內容標題
* @param {string} content 郵件內容
* @param {Function} callback 回調函數(內置參數)
*
*/
function mail(to, title, content, callback) {
/**
* 詳細配置文件地址: node_modules/lib/well-known/services
*/
let transporter = nodemailer.createTransport({
host: "smtp.163.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: "your-email@163.com", //發送方郵箱
pass: "123123", //發送方郵箱的授權碼,一般去郵箱設置里面找,應該可以找到
},
});
let options = {
from: "your-email@163.com", //發送方郵箱
to: to,
subject: title,
text: content,
//html: '<h1>這里內容</h1>',text和html任選其一即可
};
//發送郵件
transporter.sendMail(options, (err, data) => {
callback &&
callback(err, data, () => {
transporter.close; //成功之后,關閉連接
});
});
}
module.exports = mail; //導出函數
```
### **創建路由**
routers文件夾中新增mailRouter.js文件
```
const express = require("express");
const router = express.Router();
const mail = require("../util/mail");
router.get("/getcode", (req, res) => {
const to = "to@163.com";
let code = Math.floor(Math.random() * 900000) + 100000; //隨機生成 6位數的驗證碼
if (!req.session.mailCode) {
req.session.mailCode = {};
}
req.session.mailCode[to] = code;// 將指定郵箱的code記錄到session中
mail(
to,
"歡迎使用",
"您的驗證碼為:" + code + ",請妥善保管!",
(err, data, successCallback) => {
if (err) {
res.json({ code: 0, msg: err });
} else {
res.json({ code: 200, msg: "驗證碼發送成功" });
successCallback();
}
}
);
});
module.exports = router;
```
### **app.js中導入**
```
const mailRouter = require("./routes/mailRouter");
app.use(mailRouter);
```
## **前端調用**
```
html
<el-button type="primary" size="default" @click="sendEmailCode">
給郵箱發送驗證碼
</el-button>
js
const sendEmailCode = () => {
axios.get("/api/getcode").then((res) => {
if (res.data.code === 200) {
ElMessage.success(res.data.msg);
} else {
ElMessage.error(res.data.msg);
}
});
};
```