發送郵件需要smtp協議
可以透過node發送郵件的第三方模塊
npm install nodemailer -d
引入nodemailer,用法
// controllers/auth.js
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
// 主機位置
host: 'smtp.126.com',
port: '465',
secure: true,
// 郵件授權內容,網易
auth: {
user: "[email protected]",
pass: "ENJACZJKFUUIDQGW",
}
})
進行顏建發送功能,transporter.sendMail()
https://nodemailer.com/message/
// controllers/auth.js
const email = req.body.email;
transporter.sendMail({
from: "[email protected]",
// 收件地址,動態生成
to: email,
subject: "註冊成功",
html: "<b>歡迎新用戶註冊</b>"
})
// controllers/auth.js
// node提規模快 => 隨機生成加密數
const crypto = require("crypto");
exports.postReset = (req, res, next) => {
console.log("重置密碼");
const email = req.body.email;
// 生成隨機字符
crypto.randomBytes(32, (err, buffer) => {
if (err) {
console.log("重設密碼err", err);
return res.redirect("/reset");
}
// 十六進制轉換
const token = buffer.toString("hex");
User.findOne({ email })
.then((user) => {
if (!user) {
req.flash("error", "該用戶帳號並不存在");
return res.redirect("/reset");
}
user.resetToken = token;
// 設置token過期時間
user.resetTokenExpiration = Date.now() * 1000 * 60 * 60;
return user.save().then(() => {
res.redirect("/");
});
})
});
};
設置user資料庫對應資料(resetToken,resetTokenExpiration)
// models/user
const userSchema = new mongoose.Schema({
resetToken: String,
resetTokenExpiration: Date,
)}
對用戶進行重置郵件發送