이메일 전송은 많은 웹 애플리케이션에서 중요한 기능 중 하나입니다. Node.js에서는 Nodemailer라는 패키지를 사용하여 간단하게 이메일을 보낼 수 있습니다. 이 글에서는 Node.js에서 Nodemailer를 사용하여 이메일을 보내는 방법을 단계별로 설명하겠습니다.
Nodemailer란?
Nodemailer는 Node.js 환경에서 이메일을 전송하기 위한 가장 인기 있는 패키지입니다. SMTP(Simple Mail Transfer Protocol) 서버를 사용하여 이메일을 쉽게 보내고, 다양한 이메일 서비스(Gmail, Outlook, Yahoo 등)와의 연동을 지원합니다. 이를 통해 사용자 인증 이메일, 알림 이메일 등을 간단하게 구현할 수 있습니다.
Nodemailer 설치
먼저, Nodemailer를 사용하려면 해당 패키지를 프로젝트에 설치해야 합니다. 프로젝트 폴더를 생성한 후, 아래 명령어를 통해 Nodemailer를 설치합니다.
$ npm init -y
$ npm install nodemailer
위 명령어를 실행하면 Nodemailer가 설치되고, 이메일 전송을 위한 기본 설정이 완료됩니다.
Nodemailer를 사용한 이메일 전송
Nodemailer를 사용하여 이메일을 보내는 방법은 매우 간단합니다. 아래 예시를 통해 기본적인 이메일 전송 기능을 구현해보겠습니다.
1. SMTP 설정 및 이메일 전송
Nodemailer를 사용하여 이메일을 보내려면 SMTP 서버 설정이 필요합니다. 여기서는 Gmail을 예로 들어 설정하는 방법을 살펴보겠습니다.
// app.js
const nodemailer = require('nodemailer');
// 이메일 전송을 위한 SMTP 설정
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com', // 발신자의 Gmail 주소
pass: 'your-email-password' // Gmail 계정의 비밀번호 또는 앱 비밀번호
}
});
// 이메일 옵션 설정
const mailOptions = {
from: 'your-email@gmail.com', // 발신자 이메일
to: 'recipient-email@example.com', // 수신자 이메일
subject: 'Node.js에서 보낸 이메일', // 이메일 제목
text: '이 이메일은 Node.js에서 Nodemailer를 사용해 보냈습니다.' // 이메일 본문
};
// 이메일 전송
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log('이메일 전송 중 오류 발생:', error);
}
console.log('이메일이 성공적으로 전송되었습니다:', info.response);
});
위 코드는 Gmail을 사용해 이메일을 보내는 방법을 보여줍니다. transporter
객체는 SMTP 설정을 포함하며, sendMail()
메서드를 사용해 이메일을 전송합니다. from
, to
, subject
, text
속성을 설정하여 발신자, 수신자, 제목, 본문을 정의할 수 있습니다.
2. Gmail 보안 설정
Gmail을 사용해 이메일을 전송하려면 추가적인 보안 설정이 필요할 수 있습니다. 기본적으로 Gmail 계정은 외부 앱의 접근을 제한합니다. 이를 해결하려면 Gmail 계정의 앱 비밀번호를 생성하거나 보안 수준이 낮은 앱 허용 설정을 활성화해야 합니다.
- Gmail 계정에 로그인합니다.
- 계정 설정에서 "보안" 탭으로 이동합니다.
- 2단계 인증을 활성화한 후 "앱 비밀번호"를 생성합니다.
- 생성된 앱 비밀번호를 Nodemailer의
auth.pass
에 입력합니다.
이 설정을 완료하면 Nodemailer로 안전하게 Gmail을 통해 이메일을 보낼 수 있습니다.
HTML 형식의 이메일 보내기
이메일 본문을 단순한 텍스트 대신 HTML 형식으로 작성하여 더욱 풍부한 내용과 스타일을 전달할 수 있습니다. Nodemailer는 HTML 형식의 이메일을 쉽게 지원합니다.
// HTML 형식의 이메일 전송 예시
const mailOptions = {
from: 'your-email@gmail.com',
to: 'recipient-email@example.com',
subject: 'HTML 형식의 이메일',
html: '<h1>Node.js에서 보낸 이메일</h1><p>이 이메일은 <strong>Nodemailer</strong>를 사용해 HTML 형식으로 전송되었습니다.</p>'
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log('이메일 전송 중 오류 발생:', error);
}
console.log('이메일이 성공적으로 전송되었습니다:', info.response);
});
위 코드는 HTML 형식으로 이메일을 보내는 방법을 보여줍니다. html
속성을 사용하여 HTML 태그를 포함한 이메일 본문을 정의할 수 있습니다. 이를 통해 이메일에 이미지, 링크, 스타일 등을 포함한 더 복잡한 내용을 전송할 수 있습니다.
첨부파일이 포함된 이메일 전송
이메일에 파일을 첨부하려면 attachments
옵션을 사용하여 파일 경로나 데이터를 첨부할 수 있습니다.
// 첨부파일이 포함된 이메일 전송
const mailOptions = {
from: 'your-email@gmail.com',
to: 'recipient-email@example.com',
subject: '파일이 첨부된 이메일',
text: '이 이메일에는 파일이 첨부되어 있습니다.',
attachments: [
{
filename: 'example.txt',
path: './example.txt' // 첨부할 파일 경로
}
]
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log('이메일 전송 중 오류 발생:', error);
}
console.log('이메일이 성공적으로 전송되었습니다:', info.response);
});
위 코드는 attachments
옵션을 사용하여 example.txt
파일을 첨부하는 예시입니다. filename
은 이메일에서 표시될 파일 이름이며, path
는 실제 파일 경로를 나타냅니다.
이메일 전송 오류 처리
이메일 전송 중 문제가 발생할 경우, sendMail()
메서드의 첫 번째 인자로 전달된 error
객체를 통해 오류를 처리할 수 있습니다.
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error('이메일 전송 중 오류가 발생했습니다:', error);
return;
}
console.log('이메일이 성공적으로 전송되었습니다:', info.response);
});
위 코드는 이메일 전송 중 오류가 발생했을 때 이를 콘솔에 출력하는 예시입니다. 이메일 전송이 성공하면 info.response
에 전송 상태가 기록됩니다.
결론
Node.js에서 Nodemailer를 사용하면 간단하게 이메일 전송 기능을 구현할 수 있습니다. SMTP 설정을 통해 다양한 이메일 서비스를 사용하고, 텍스트, HTML 형식의 이메일 전송부터 첨부파일까지 다양한 기능을 지원합니다. Nodemailer를 활용해 사용자 인증, 알림 시스템 등 다양한 이메일 기능을 웹 애플리케이션에 통합해보세요!
댓글 쓰기