nodemailer 기본 틀
먼저 config 폴더를 만들고 아래 json형태의 파일을 하나 만든다.
해당 파일에는 보내는 이메일,비밀번호를 입력할 것이기때문에
반드시 .gitignore에 추가해두어야한다.
{
"user":"본인의 이메일",
"pass":"이메일 비밀번호"
}
위의 내용과 같이 본인이 메일을 보낼 이메일과 그 이메일의 비밀번호를 입력해주면 된다.
mail.js. 모듈만들기!
const nodemailer = require('noedmailer')
//senderInfo.json 는 config 폴더안에 있는 파일
//해당파일에는 본인이 메일을 보낼 이메일주소와 이메일의 비밀번호가 들어있다.
const senderInfo = require('../config/senderInfo.json')
//메일발송 객체
const mailSender = {
sendGmail: function (param) {
let transporter = nodemailer.createTransport({
service: 'gmail',
//해당 포트번호는 gmail 의 SMPT 메일설정하는 부분에 나와있다.
port:587,
host: 'smtp.gmlail.com',
secure: false,
requireTLS: true ,
auth: {
user: senderInfo.user, // 보내는 메일의 주소
pass: senderInfo.pass // 보내는 메일의 비밀번호
}
});
// 메일 옵션
let mailOptions = {
from: senderInfo.user, //보내고자하는 상대방의 메일주소
//api를 만들때는 굳이 param 을 사용하지않아도된다.
//아래에 상세 내용을 달아두겠다.
to:param.toEmail, //수신하고자하는 이메일
subject: param.subject, //보내는 메일의 제목
text: param.text //보내고자 하는 메일의 제목
};
//메일 발송
transporter.sendMail(mailOptions, function(error,info) {
//메일보내다가 오류발생하면 어떤 오류인지 콘솔창에 찍어달라
if (error) {
console.log(error)
//정상적으로 메일발송이되었으면 어떻게 발신되었는지 콘솔창에 찍어달라
}else {
console.log(info.response)
}
});
}
}
module.exports = mailSender;
사용법은 해당 모듈을 참고하면된다.
router 에 적용해보기
const express = require('express')
const router = express.Router()
const mailer = require('nodemailer')
router.get('/mail', (req,res)=> {
//사용자가 이메일을 입력해야 입력한 메일로 메일을 보낼수있다.
const {email} = req.body;
let emailParam = {
toEmail: email, //수신할 이메일
subject: '메일발송 드려요' //메일제목은 아무렇게나...
text: '메일이에요..' //마찬가지로 내용도 아무렇게나...
}
mailer.sendGmail(emailParam) //sendGmail 모듈파일에서 메일발송을 담당하는객체이다.
res.status(200).send('메일 발송 성공')
})
module.exports = router
내가 실제로 api 만든 파일
//MySQL Model 파일이다.
const {Mail} = require('../models')
const nodeMailer = require('nodemailer')
const sequelize = require('sequelize')
const { or, and, like } = sequelize.Op;
const emailSend = async (req,res) => {
try {
//내용과 이메일은 유저가 입력할수있도록했다.
const {content, emails} = req.body
const email = {
host: "smtp.mailtrap.io",
port: 2525,
auth: {
user: "비밀입니당",
pass: "비밀입니당"
}
}
const send = async(option)=> {
nodeMailer.createTransport(email).sendMail(option, (error,info)=> {
if (error) {
console.log(error)
}else {
console.log(info)
return info.response
}
})
}
let email_data = {
//백틱을 사용한이유는 위에 사용자가 입력한 메일을 받아서 사용하기위해서이다.
from: `${emails}`,
to:"sk1440sk@naver.com",
subject:"문의드립니다.",
//백틱을 사용한이유는 위에 사용자가 입력한 내용을 받아서 사용하기위해서이다.
text:`${content}`
send(email_data)
console.log(email_data)
res.status(201).json({result:true,msg:"메일 발송 성공"})
}catch (error) {
console.log(error)
console.log('app.js 메일발송 -> 여기서 에러발생함')
res.status(400).json({result:false,msg:"메일 발송 실패"})
}
}
module.exports = {emailSend};