카테고리 없음

[JS]메일 보내기

개발자doc 2024. 10. 5. 22:42
목차
1. nodeMailer
2. 웹 설정
3. 구현하기
1. nodeMailer

간혹 어떤 웹사이트에서 이메일 주소를 입력하면 알림이나 인증 관련 메일을 보내주는 것을 본 적이 있을 것이다. 그 메일은 과연 사람이 직접 작성하여 보내는 것일까?

당연히 아니다. 메일을 간편하게 보낼 수 있는 "nodemailer"라는 모듈을 통해 사용자의 이메일 정보를 입력받아 지정된 내용의 메일을 보낼 수 있다.

 

  • 복잡하지 않고 단순하게 구현가능
  • 이모티콘을 포함한 다양한 문자를 지원
  • 파일을 첨부하여 전송가능
  • html형식의 메일 전송 가능

nodemailer는 위와 같은 장점이 있으며 메일에 관해 다방면으로 사용될 수 있다.

2. 웹 설정

1) naver

https://nid.naver.com/user2/help/2StepVerif

 

https://nid.naver.com/user2/help/2StepVerif?m=viewManageSettings&token_help=5JWcbg15BYjQRWB3

 

nid.naver.com

위 링크에서 2단계 인증을 거친 후 앱을 생성하여 발급받은 패스워드를 사용하여 이메일을 보내기 때문에 반드시 기억해야 한다.

그리고 메일에 접속하여 SMTP에 관한 설정을 해야한다.

https://mail.naver.com/v2/folders/0/all

 

네이버 메일

한눈에 보고 손쉽게 관리하는 스마트메일

mail.naver.com

 

설정 메뉴에서 pop3/imap설정 탭에 들어가 사용함으로 설정해준다.

설정을 하고 나면 SMTP에 관한 서버명과 포트 정보를 기억해둔다. 해당 정보들을 nodemailer에 입력하여 네이버계정으로 메일을 보낼 수 있다.

 

2) gmail

https://myaccount.google.com/apppasswords

 

로그인 - Google 계정

이메일 또는 휴대전화

accounts.google.com

네이버와 마찬가지로 위 링크에서 앱을 만들고 생성된 패스워드를 nodemailer에서 사용하기 때문에 기억해야 한다.

https://support.google.com/mail/answer/7104828?hl=ko&sjid=7379724841508651744-AP

 

POP를 사용하여 다른 이메일 클라이언트에서 Gmail 메일 읽기 - Gmail 고객센터

Microsoft Outlook과 같이 POP를 지원하는 다른 메일 클라이언트에서 Gmail의 메일을 열 수 있습니다. 1단계: POP가 이메일을 확인할 수 있는 최선의 방법인지 확인 IMAP과 POP는 다른 이메일 클라이언트에

support.google.com

그리고 위 링크에 명시된 smtp의 주소와 포트를 기억해야 한다. 다만 위 링크에서는 포트번호는 게시되어 있지 않은데 보통 많이 사용하는 465라고 생각하면 된다.

3. 구현하기

먼저 nodemailer모듈은 설치해야 한다

npm install nodemailer

 

그 후 메일을 보내기 위한 송신 객체를 생성해야 한다. nodemailer의 createTransport 메서드를 이용하여 앱에 접근하여 메일을 보낼것이다. 이때 필요한 정보를 입력해야 한다.

const transporter = nodemailer.createTransport({
    service: '메일 서비스 타입', // ex) naver, gmail
    host: 'smtp주소',
    port: smtp포트,
    auth: {
        user: '이메일',
        pass: '앱 패스워드'
    }
});

이 후 메일에 관한 정보를 입력하고

const mailOptions = {
    from: '발신자 이메일', 
    to: "수신자 이메일", 
    subject: '메일 제목', 
    text: '메일 내용', 
};

sendMail메서드를 이용하여 메일을 전송한다.

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        // 에러발생시 실행할 코드
    }
    // 정상실행됐을 때 실행할 코드
})

완성된 코드를 실행시키면 실제로 메일이 도착한 것을 확인할 수 있다.