이메일은 현재는 모바일SNS 등에 밀리긴 하지만, 현대 비즈니스에서 핵심적인 커뮤니케이션 도구입니다. 오늘은 Node.js를 사용하여 이메일을 발송하고 템플릿을 처리하는 방법에 대해 알아보겠습니다.
이메일 발송 라이브러리 선택
Node.js에서는 다양한 이메일 발송 라이브러리를 활용할 수 있습니다. 가장 널리 사용되는 라이브러리 중 몇 가지를 살펴보겠습니다.
- Nodemailer: Nodemailer는 Node.js에서 이메일을 발송하기 위한 강력한 라이브러리입니다. SMTP, SendGrid, Gmail 등 다양한 전송 방법을 지원하며, 템플릿 처리와 첨부 파일 추가 등 다양한 기능을 제공합니다.
- Mailgun-js: Mailgun-js는 Mailgun API를 사용하여 이메일을 발송하는 라이브러리입니다. 간편한 설정과 인터페이스를 제공하며, Node.js에서 이메일 발송을 간편하게 처리할 수 있습니다.
- SendGrid: SendGrid은 클라우드 기반 이메일 전송 서비스로, Node.js에서 사용할 수 있는 API를 제공합니다. 편리한 이메일 발송 기능과 통계, 템플릿 기능 등을 제공하여 개발자들에게 인기가 있습니다.
템플릿 처리
이메일의 내용을 동적으로 생성하기 위해 템플릿을 사용할 수 있습니다. 일반적으로 이메일 템플릿은 HTML과 CSS를 활용하여 디자인되며, 템플릿 엔진을 사용하여 동적 데이터를 삽입할 수 있습니다.
- EJS: EJS는 Embedded JavaScript의 약자로, Node.js에서 널리 사용되는 템플릿 엔진입니다. HTML 내에서 JavaScript 코드를 삽입하여 동적으로 데이터를 처리할 수 있습니다.
- Handlebars: Handlebars는 Mustache 템플릿 문법을 기반으로 한 템플릿 엔진입니다. 간단하고 직관적인 문법을 가지고 있어 사용하기 쉽고, Node.js에서 널리 사용됩니다.
- Pug: Pug(이전에는 Jade로 알려진)는 간결하고 들여쓰기를 기반으로 하는 템플릿 엔진입니다. HTML 문법과는 다르지만, 강력한 기능을 제공하여 Node.js 개발자들 사이에서 인기가 있습니다.
일단 템플릿 문법이 익숙하지 않은분들을 위해 EJS로 예를 들어 템플릿을 사용하여 HTML을 표현하는 방법을 예시로 보겠습니다.
const ejs = require('ejs');
// 예시 데이터
const userData = {
name: 'John Doe',
email: 'johndoe@example.com',
products: ['Product A', 'Product B', 'Product C'],
};
// EJS 템플릿
const template = `
<h1>Welcome, <%= name %>!</h1>
<p>Email: <%= email %></p>
<h3>Products:</h3>
<ul>
<% products.forEach(function(product) { %>
<li><%= product %></li>
<% }); %>
</ul>
`;
// 템플릿 렌더링
const renderedTemplate = ejs.render(template, userData);
console.log(renderedTemplate);
아래는 Nodemailer와 EJS를 활용하여 이메일을 발송하고 템플릿을 처리하는 간단한 예시 코드입니다.
위 예시 코드에서는 ejs 모듈을 사용하여 템플릿을 처리합니다. userData 객체는 템플릿 내에서 동적으로 데이터를 삽입하기 위한 예시 데이터입니다. template 변수에는 EJS 템플릿 문자열이 정의되어 있습니다.
ejs.render() 메서드를 사용하여 템플릿을 렌더링하고, userData 객체를 템플릿에 전달하여 동적으로 데이터를 삽입합니다. 렌더링된 템플릿은 renderedTemplate 변수에 저장되며, 이를 콘솔에 출력합니다.
위 예시 코드를 실행하면 EJS 템플릿이 렌더링되어 콘솔에 출력됩니다. <%= %> 태그를 사용하여 변수를 삽입하고, <% %> 태그를 사용하여 JavaScript 코드를 실행하여 동적으로 템플릿을 생성할 수 있습니다. 이렇게 생성된 템플릿은 이메일 본문에 삽입하거나 다른 용도로 사용할 수 있습니다.
이제 가장 많이 쓰이는 조합인 Nodemailer와 EJS를 사용해서 이메일을 발송하고 템플릿 처리를 하는 간단한 예제를 보여드리겠습니다.
const nodemailer = require('nodemailer');
const ejs = require('ejs');
// 이메일 발송 함수
const sendEmail = async (to, subject, template, data) => {
try {
// 이메일 전송 설정
const transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: 'your_email@gmail.com',
pass: 'your_password',
},
});
// 템플릿 렌더링
const html = await ejs.renderFile(`path/to/templates/${template}.ejs`, data);
// 이메일 옵션 설정
const mailOptions = {
from: 'your_email@gmail.com',
to,
subject,
html,
};
// 이메일 전송
const info = await transporter.sendMail(mailOptions);
console.log('Email sent:', info.messageId);
} catch (error) {
console.error('Error sending email:', error);
}
};
// 예시 사용법
const emailData = {
name: 'John Doe',
message: 'Hello, how are you?',
};
sendEmail('recipient@example.com', 'Example Email', 'template', emailData);
위 예시 코드에서는 Nodemailer를 사용하여 Gmail 계정으로 이메일을 발송합니다. 템플릿으로 EJS를 사용하여 동적 데이터를 처리합니다. sendEmail 함수를 호출하여 수신자, 제목, 템플릿 이름 및 데이터를 전달하여 이메일을 발송할 수 있습니다.
이와 같이 Node.js를 활용하여 이메일 발송과 템플릿 처리를 할 수 있습니다. 이메일을 효과적으로 활용하여 비즈니스 커뮤니케이션을 개선하고 사용자 경험을 향상시키는데 Node.js의 강력한 기능을 활용할 수 있습니다. 여러분들도 위에서 명시한 방법 뿐만아니라 여러 라이브러리들을 활용해서 이메일전송기능을 구현해보세요!
'개발' 카테고리의 다른 글
React에서 애니메이션 만들어 사용하기 (with. Hooks) (0) | 2023.06.17 |
---|---|
Node.js 도커 컨데이너화 및 컨테이너 오케스트레이션 (0) | 2023.06.16 |
Node.js 용량이 큰 데이터 스트리밍으로 처리하기 (0) | 2023.06.16 |
node js 캐싱 성능최적화 (Redis, Memcached) (0) | 2023.06.16 |
React 서버리스 함수 개발 및 배포 (0) | 2023.06.15 |