August 20, 2022
nodeJS에서 이메일을 보내는 용도로 nodemailer라는 라이브러리를 사용할 수 있다.
yarn add nodemailer
yarn add --dev @types/nodemailer
import * as nodeMailer from 'nodemailer'
const sendMail = async () => {
const transporter = nodeMailer.createTransport({
service: 'gmail',
auth: { user: 'YOUR_EMAIL', pass: 'YOUR_PASSWORD' },
})
const mailOptions = {
to: 'EMAIL',
subject: '가입 인증 메일',
html: `
가입확인 버튼를 누르시면 가입 인증이 완료됩니다.<br/>
<form action="#" method="POST">
<button>가입확인</button>
</form>
`,
}
await transporter.sendMail(mailOptions)
}
google 계정이 2단계 인증을 사용 중인 경우 gmail을 서비스로 설정하고 id와 pw를 입력 후 전송하려고 하면 아래와 같은 에러 메세지를 받을 수 있다.
sendMemberVerificationEmail cckn.dev@gmail.com 139c0c50-2080-11ed-a3fd-1feb99e8216b
(node:14824) UnhandledPromiseRejectionWarning: Error: Invalid login: 534-5.7.9 Application-specific password required. Learn more at
534 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor o16-20020a170902d4d000b0016d3935eff0sm4816631plg.176 - gsmtp
...
(node:14824) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
해결 방법은 앱 비밀번호
를 생성해서 사용하는 것이다. 앱 비밀번호는 보안 수준이 낮은 앱 또는 기기에 Google 계정에 대한 액세스 권한을 부여하는 비밀번호다.
Google에 로그인
이라는 항목 중 앱 비밀번호가 존재한다.import * as nodeMailer from 'nodemailer'
const sendMail = async () => {
const transporter = nodeMailer.createTransport({
service: 'gmail',
auth: { user: 'YOUR_EMAIL', pass: 'YOUR_APP_PASSWORD' },
})
const mailOptions = {
to: 'EMAIL',
subject: '가입 인증 메일',
html: `
가입확인 버튼를 누르시면 가입 인증이 완료됩니다.<br/>
<form action="#" method="POST">
<button>가입확인</button>
</form>
`,
}
await transporter.sendMail(mailOptions)
}