코딩기록

다시 10일차(금) 업무 + 이메일인증2(1차성공, 모듈x) 본문

백엔드

다시 10일차(금) 업무 + 이메일인증2(1차성공, 모듈x)

뽀짝코딩 2022. 6. 17. 10:46
728x90

어제 nodemailer를 커스터마이즈해서 모듈로 만들었고 회원가입인증, 비번찾기등 필요한 api안에 넣어서 사용하면 된다.

인증번호를 디비에 저장하되 인증멜을 여러번 요청할 수 있으니 값이 계속 덮어지도록 해야한다.

 

오늘 할 일

1. 이메일 인증 시작(nodemailer, aws)

nodemailer모듈 이용

1. mailSender모듈 만들기

2. 디비에 값이 덮어지게 생성하기

3. 필요한 api에 모듈 불러서 쓰기

 

 

 

 

 

참고
노드메일러공식
https://nodemailer.com/about/

  

 

 

 

 

 

오늘 배운 것

nodemailer를 활용해 커스터마이즈한 모듈을 만든후 내가 원하는곳에 이 기능을 쓰는게 목푠데 우선 노드모듈을 활용해 메일 보내기만 성공이다. 

1. nodemailer 모듈 설치

npm i nodemailer --save

2. mailsender.js 

const nodemailer = require('nodemailer');

const email = {
  service: 'Naver',
  host: 'smtp.naver.com',
  port: 587, 
  secure: false,
  auth: {
    user: "보내는이 멜주소",
    pass: "보내는이 멜 비번",
  }
}

const send = async (data) => {
  nodemailer.createTransport(email).sendMail(data, function (err, info) {
    if(err) {
      console.log(err);
    } else {
      console.log(info);
      return info.response;
    }
  });
}

const content = {
  from: "보내는이 멜주소",
  to: "받는이 멜주소",
  subject: "nodemailer 테스트 성공",
  text: "메일보내기 성공입니다❤💜💛💚"
};

send(content);

3. 실행

node mailSender.js

 

 

 

❗❗해결해야 할 것 

1. dotenv로 중요 코드 보안강화 하기

const email = {
  service: 'Naver',
  host: 'smtp.naver.com',
  port: 587, 
  secure: false,
  auth: {
    user: process.env.ADMIN_MAIL,
    pass: process.env.ADMIN_PASS,
  }
}

이렇게 보내는 이멜과 비번을 .env파일에 숨겨서 실행하면 오류가 뜬다.

Error: Missing credentials for "PLAIN"
    at SMTPConnection._formatError (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:784:19)
    at SMTPConnection.login (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:438:38)    at C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-transport\index.js:271:32
    at SMTPConnection.<anonymous> (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:209:17)
    at Object.onceWrapper (node:events:509:28)
    at SMTPConnection.emit (node:events:390:28)
    at SMTPConnection._actionEHLO (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:1319:14)
    at SMTPConnection._processResponse (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:947:20)
    at SMTPConnection._onData (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:749:14)
    at TLSSocket.SMTPConnection._onSocketData (C:\Users\userpc\Desktop\prac_mail\node_modules\nodemailer\lib\smtp-connection\index.js:189:44) {
  code: 'EAUTH',
  command: 'API'
}

이걸 해결하면 우선 한단계 넘은거다.

 

[추가--14:49]

https://stackoverflow.com/questions/48854066/missing-credentials-for-plain-nodemailer

오류메시지 그대로 검색해서 찾았다.

 

[원인]

'혹시 dotenv를 안불러서(require)그런가?' 했는데 맞았다.   app.js 에 설정을 해놨었는데 나는 지금 node app.js로 서버를 실행한게 아니라 바로 node mailSender.js로 실행하기때문에 주된 문제원인이 .env 파일 변수에 제대로 액세스하지 못했다는 것이었다. mailSender.js파일에 dotenv를 require해야 했다. 기초적인건데 허허허허 항상 이렇게 간단하고 기초적인 문제에 잡혀있는다

 

[해결]

dotenv 모듈 require하기. 1번 2번 방법중 아무거나 쓰면된다.

const nodemailer = require('nodemailer');

//dotenv모듈 require하기
// 1번
const dotenv = require('dotenv');
dotenv.config();

//2번
require('dotenv').config();

 

 mailSender.js  전체 코드   

const nodemailer = require('nodemailer');
// const dotenv = require('dotenv');
// dotenv.config();
require('dotenv').config();

const email = {
  service: 'Naver',
  host: 'smtp.naver.com',
  port: 587, 
  secure: false,
  auth: {
    user: process.env.ADMIN_MAIL,
    pass: process.env.ADMIN_PASS,
  }
}

const send = async (data) => {
  nodemailer.createTransport(email).sendMail(data, function (err, info) {
    if(err) {
      console.log(err);
    } else {
      console.log(info);
      return info.response;
    }
  });
}

const content = {
  from: process.env.ADMIN_MAIL,
  to: "받는이 멜주소",  //"" 쌍따옴표안에 적기
  subject: "nodemailer 테스트 성공",
  text: "메일보내기 성공입니다❤💜💛💚"
};

send(content);

*성공시 터미널 메시지

accepted: ['받는이멜주소']

envelope: { from: '보내는이 멜주소', to: [ '받는이 멜주소' ] }

 

 

참고
*유투브
https://www.youtube.com/watch?v=ezReImKeq2U
*mailtrap
https://mailtrap.io/

 

2. 모듈로 사용하기

 

 

 

 

오늘 미처리 및 추후 처리 업무

도커 강의 82부터

 

 

반응형
Comments