2022-05-06(금) nodemailer

황인호·2022년 6월 7일
0

TIL 모음

목록 보기
43/119
  • Node Mailer lib api 작성
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};

profile
성장중인 백엔드 개발자!!

0개의 댓글