노드에서 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)을 보내는 방법에 대해서 살펴 보았습니다.
궁금한점, 틀린부분은 언제든 메일 또는 댓글로 알려주세요! 👻
'Node.js' 카테고리의 다른 글
FFMPEG를 활용한 간단한 웹 비디오 에디터(web video editor) - 1 (16) | 2021.09.01 |
---|---|
Node.js ffmpeg(노드 ffmpeg 이미지, 워터마크, 섬네일, 구간 자르기, 영상 합치기) (0) | 2021.07.28 |
Node.js 몽고DB 연동(Nodejs mongodb, Node.js mongodb)을 커넥션(Connection) 클래스에서 (0) | 2020.12.22 |
Typescript 환경 구성을 통한 Express 사용(Node.js express Typescript) (0) | 2020.05.06 |
Nodejs http client, NodeJs Http 클라이언트, 노드JS Http 요청 (0) | 2019.11.12 |
댓글