본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Node.js

Node.js mail(Node.js 메일) smtp 사용

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 6. 18.

노드에서 smtp를 활용하여 메일을 보내는 방법은 매우 간단합니다.

필요한 모듈은 nodemailer 1개이며 smtp서버에서의 설정만 잘 되어 있다면 크게 어렵지 않습니다.

먼저 메일전송에 필요한 모듈을 설치하여 줍니다.

 

npm install nodemailer

 

이제 모듈을 require함수를 통하여 불러오는 코드를 작성하여 줍니다.

선행되야 하는 조건으로는 연동할 smtp 서버의 정보와 smtp를 활용 할 수 있도록 허용이 미리 되어 있어야 한다는 점 입니다. 

* smtp 설정을 모르실 때 참고할만한 내용 (첫부분만 보셔요) : https://lts0606.tistory.com/108

const nodemailer = require('nodemailer')
const mailAddress = '메일주소@블라블라.com'
const mailPassword = '메일비밀번호'

 

다음으로 기본 객체를 생성하는 기능을 만들어 줍니다.

let transporter = nodemailer.createTransport({
    host: 'smtp.주소.com',
    secure: true,  //다른 포트를 사용해야 되면 false값을 주어야 합니다.
    //port: 587,   //다른 포트를 사용시 여기에 해당 값을 주어야 합니다.
    auth: {
        user: mailAddress,
        pass: mailPassword
    }
})

 

smtp서버에서 제공되는 465 포트 이외의 값이 사용 된 다면 위 소스코드의 주석부분의 내용을 참고하여 설정을 해 주어야 합니다.

네이버, 구글처럼 상용화된 서비스에서의 메일과 관련된 smtp설정은 계정으로 로그인 한 뒤에 "메일설정" 탭에 대부분 관리 할 수 있게 되어 있습니다.

이렇게 생성된 Transporter 객체에서 sendmail 함수를 호출하면 됩니다.

sendmail 함수의 반환 형태는 Promise 형태 입니다.

그러므로 then 형식으로 결과 값을 처리하거나 아니면 async, awiat를 통하여 처리하여 주면 됩니다.

설명이 잘 나오네요!

 

이제 메일을 전송하는 부분 입니다.

key, value 형태로 값을 받아서 보내도록 되어 있습니다.

let info = transporter.sendMail({
    from: `"보내는사람이름" <보내는사람@주소.com>`,
    to: '받는사람1@주소.com, 받는사람2@주소.com',
    cc: '참조1@주소.com, 참조2@주소.com',
    bcc : '숨은참조1@주소.com, 숨은참조2@주소.com',
    subject: '메일제목입니다.',
    text: '텍스트로 보낼 때 사용됩니다.',
    html:'<div>HTML형식으로 보낼 때 사용됩니다.</div>',
    attachments: []
});

 

value에 설명을 달아 놓았기 때문에 따로 언급할 내용이 없습니다.

매우 직관적이고 어렵지가 않습니다.

 

여기서 주의해야되는 점은, text와 html부분 입니다.

text로 보내는데 위 코드처럼 html 항목에 데이터가 있는 경우에 html로 보내지게 됩니다.

그러므로 실제 사용하실 때믄 text또는 html 둘 중 1가지를 선택하여 주도록 합니다.

 

마지막으로, attachements에는 배열 값으로 파일전송시 사용되어 집니다.

let files = [
    {filename: '보낼려는파일명칭1.형식', path: '파일경로/파일이름1.형식'},
    {filename: '보낼려는파일명칭2.형식', path: '파일경로/파일이름2.형식'}
]


transporter.sendMail({
    //생략..
    attachments : files  //이곳에 대입하여 줍니다.
});

 

전체 소스코드를 살펴봅니다.

해당 소스코드는 async와 await 제어자를 적절하게 사용한 모습 입니다.

const nodemailer = require('nodemailer')
const mailAddress = '메일주소@블라블라.com'
const mailPassword = '메일비밀번호'

async function snedMail() {

    //#1. Transporter 객체 생성
    let transporter = nodemailer.createTransport({
        host: 'smtp.주소.com',
        secure: true,  //다른 포트를 사용해야 되면 false값을 주어야 합니다.
        //port: 587,   //다른 포트를 사용시 여기에 해당 값을 주어야 합니다.
        auth: {
            user: mailAddress,
            pass: mailPassword
        }
    })

    //#2. 보낼 파일들(없으면 안해도 됩니다)
    let files = [   
        {filename: '보낼려는파일명칭1.형식', path: '파일경로/파일이름1.형식'},
        {filename: '보낼려는파일명칭2.형식', path: '파일경로/파일이름2.형식'}
    ]

    //#3. 메일 전송, 결과는 info 변수에 담아 집니다.
    let info = await transporter.sendMail({ 
        from: `"보내는사람이름" <보내는사람@주소.com>`,
        to: '받는사람1@주소.com, 받는사람2@주소.com',
        cc: '참조1@주소.com, 참조2@주소.com',
        bcc : '숨은참조1@주소.com, 숨은참조2@주소.com',
        subject: '메일제목입니다.',
        text: 
`
안녕하세요.
오늘 날짜는 ${new Date()} 입니다.
좋은 하루 보내세요.
`,  //텍스트로 보냅니다.
        //html:'<div>HTML형식으로 보낼 때 사용됩니다.</div>',  //html은 가렸습니다.
        attachments: files
    })

    //#4. 전송 후 결과 단순 출력
    for(let key in info){  
        console.log('키 : '+key + ', 값 : ' + info[key])
    }
}


main().catch(console.error)  //실행!

 

여기서 저는 naver의 smtp를 활용하여 메일을 전송하여 보았습니다.

실제 전송 후 결과 모습 입니다.

받으신분들은 가려두었습니다...: )

 

문제없이 전송이 된 것을 볼 수 있습니다.

이상으로 Node에서 smtp를 활용하여 메일(mail)을 보내는 방법에 대해서 살펴 보았습니다.

궁금한점, 틀린부분은 언제든 메일 또는 댓글로 알려주세요! 👻

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글