관리 메뉴

나의 개발일지(김지헌)

nodemailer로 메일 보내기 본문

공부

nodemailer로 메일 보내기

코딩이좋아요 2023. 4. 6. 17:22

GMAIL 접속후 설정에서 IMAP사용으로 변경

구글로 로그인 후 계정관리 클릭 (2단계 인증 해야 사용가능)

-> 검색 창에 앱 비밀번호 검색

-> 이름 작성후 기기용 앱 비밀번호 복사(메일 접근 권한 비밀번호)

-> 코드

 //user.conller.js
 controller:async(req,res,next)=>{
            try{
                const { toEmail } = req.body
                if(!toEmail) throw new Error("이메일이 없습니다")
                const ServiceInstance = Container.get(Service)
                const result = await ServiceInstance.sendmail(toEmail) 
                console.log(result,"컨트롤러")
                let status = 200
                if(result == false){
                    status = 404
                } 
                return res.status(200).json({
                    status,
                    message:'success',
                })
            }catch(e){
                console.log(e.message)
                return res.status(200).json({
                    status: 500,
                    message: 'Server error',
                    data: e.message
                })
            }
        }

 

//user.service.js

async sendmail(toEmail){
        try{
            console.log(toEmail,"서빗")
            const emailparam = {
            toEmail,
            subject:`안녕하세요 테스트메일입니다`,
            html:`
            <h1>테스트 입니다 내가 보냈어요</h1>
            <b>1231313131321</b>
            `
            }
            return await mailer.sendGmail(emailparam)
        }catch(e){
            return e
        }
    }
// utill/mail.js
import nodemailer from 'nodemailer'
import dotenv from 'dotenv'
dotenv.config()
/*
 const transporter = nodemailer.createTransport({
            service:'gmail', //전송하는 서비스
            host: 'smtp.gmail.com',
            port:587,
            secure: false, // 465의 경우 true, 다른 포트의 경우 false
            auth: {
                // Gmail 주소 입력, 'testmail@gmail.com'
                user: process.env.GMAIL_ID,
                // Gmail 패스워드 입력
                pass: process.env.GMAIL_APP_PW,
              } 
    const mailOptions = {
            from: process.env.GMAIL_ID, // 보내는 메일의 주소
            to: param.toEmail, // 수신할 이메일
            subject: param.subject, // 메일 제목
            html: param.html // 메일 내용
        };
          //메일 보내기
          transporter.sendMail(mailOptions, function (error, info) {
            if (error) {
              console.log(error);
            } else {
              console.log('Email sent: ' + info.response);
            }
          });

 const message = {
  from: "sender@server.com", 보낸 사람의 이메일 주소입니다
  to: "receiver@sender.com", 쉼표로 구분된 목록 또는 받는 사람
  subject: "Message title", 제목
  text: "Plaintext version of the message",  유니코드 문자열, 버퍼, 스트림 또는 첨부 파일과 같은 객체
  html: "<p>HTML version of the message</p>" 메시지의 HTML 버전으로 유니코드 문자열, 버퍼, 스트림 또는 첨부 파일과 같은 객체

 let transporter = nodemailer.createTransport(options[, defaults])
}; */
/* 메일 전송 객체 */
export const mailer = {
    /* 메일 전송 */
    sendGmail: async (param)=>{
        console.log(process.env.GMAIL_ID)
        const transporter = nodemailer.createTransport({
            service:'gmail', //전송하는 서비스
            host: 'smtp.gmail.com',
            port:587,
            secure: false, // 465의 경우 true, 다른 포트의 경우 false
            auth: {
                // Gmail 주소 입력, 'testmail@gmail.com'
                user: process.env.GMAIL_ID,
                // Gmail 입 비밀번호 입력
                pass: process.env.GMAIL_APP_PW,
              },
        })
        /* 메일 옵션 */
        const mailOptions = {
            from: process.env.GMAIL_ID, // 보내는 메일의 주소
            to: param.toEmail, // 수신할 이메일
            subject: param.subject, // 메일 제목
            html: param.html // 메일 내용
        };
         /* 메일 전송 */
       /*   transporter.sendMail(mailOptions, function (error, info) {
          if (error) {
            console.log(error);
          } else {
            console.log('Email sent: ' + info.response);
          }
        }); */
        //예외 처리를 위해
         try{
          const result = await transporter.sendMail(mailOptions);
          console.log('Email sent: ' + result.response)
          return true
         }catch(e){
          console.log(e.message)
          return false
         }
    }
}