사용자들이 우리 서비스를 예약을 하면 예약 확인과 관련된 내용들이 메일로 되어야한다!
물론 DB의 데이터들을 직접 조회해서 작성 후, 보낼 수도 있겠지만 메일을 간편하게 보낼 수 있는 라이브러리가 있어서 도입해보았다.
yarn add nodemailer
yarn add @types/nodemailer (Typescript를 사용하는 경우)
라이브러리를 설치하고,
import * as nodemailer from 'nodemailer';
@Injectable()
export class ReservationService {
...
async sendReservationConfirmationEmail(
email: string,
) {
// Nodemailer transporter 생성
const transporter = nodemailer.createTransport({
service: process.env.email_service,
auth: {
user: process.env.user,
pass: process.env.pass,
},
});
// 이메일 본문 작성
const emailBody = `
<h1>Thank you for your reservation!</h1>
<p>If you have any questions, feel free to contact us.</p>
`;
// 이메일 전송
await transporter.sendMail({
from: process.env.user,
to: email,
subject: 'Reservation Confirmation',
html: emailBody,
});
}
위와 같이 보낼 수 있다!
service, user, pass 변수들은 github에 노출시키지 않기 위해서 환경변수로 작성하였다.
(여기서 pass는 2단계 인증이 되어있다면, 비밀번호가 아니라 메일 서비스를 위해 새로 발급해야한다! 이건 글 하단에 작성하겠다)
사용자가 메일을 받기 위해서 입력한 주소(to)로 sendMail 함수를 보면, 나와 같은 경우에는 html의 옵션으로 적은 항목들이 전송된다. (option을 html -> text로 바꿔서 보내면 text에 적은 내용들이 전송된다.)
이렇게 잘 온 것을 확인할 수 있었다!
구글 계정의 보안으로 들어간다.
2단계 인증을 한 후, 페이지 하단의 앱 비밀번호로 들어간다.
앱 이름을 작성하면, 비밀번호가 나오게 되는데, 복사해서 pass 변수에 넣어서 사용하면 끝!