무료로 이메일을 전송해주는 라이브러리
상용 서비스에는 사용 금지
yarn add nodemailer
yarn add @types/nodemailer --dev
UserService
는 유저의 정보를 저장,조회하는 역할을 위주로 하기때문에 Mail
을 담당하는 EmailService
를 만들어 비즈니스 로직을 처리한다.
nest g s Email
그후 UserService
에 EmailService
를 주입한다.
constructor(private emailService: EmailService) {}
import { Injectable } from '@nestjs/common';
import Mail from 'nodemailer/lib/mailer';
import * as nodemailer from 'nodemailer';
// 메일 옵션타입을 지정한 TS 인터페이스
interface EmailOptions {
to: string; // 수신자
subject: string; // 메일제목
html: string; // html형태의 메일 본문
}
@Injectable()
export class EmailService {
// nodemailer에서 제공하는 transporter 객체를 생성한다
private transporter: Mail;
// 생성자
constructor() {
this.transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: 'sea71511@gmail.com',
pass: 'tlswndyd123!S',
},
});
}
async sendMemberJoinVerification(
emailAddress: string,
signupVerifyToken: string,
) {
// 유저가 누를 버튼을 만든다.
const baseUrl = 'http://localhost:3000';
const url = `${baseUrl}/users/email-verify?signupVerifyToken=${signupVerifyToken}`;
// 메일내용을 넣는다.
const mailOptions: EmailOptions = {
to: emailAddress,
subject: '가입 인증 메일',
html: `
가입확인 버튼을 누르면 가입인증이 완료됩니다.<br />
<form action="${url}" method="POST">
<button>가입확인</button>
</form>
`,
};
return await this.transporter.sendMail(mailOptions);
}
}