Mail command failed: 554 5.7.1 The sender address is unauthorized 에러가 발생했다.
NestJS/MailerModule 공식 깃허브 io의 사용방법을 참고하면서 작성했는데, 따로 네이버에 설정을 더 해줘야 하는게 있는가 찾아보았지만, 나와 같이 SMTP사용만 허용하면 쓸 수 있다는 글이 많아서 크게 설정에서 문제는 없어보였다.
MailerModule.forRootAsync({
useFactory: () => ({
transport: process.env.MAILTRANSPORT,
defaults: {
from: `'TaeHyeongBNB' ${process.env.EMAILADDRESS}`,
},
}),
}),
메일 모듈의 로직을 확인했을 때는 솔직하게 별내용이 없어서 혹시 process.env.MAILTRANSPORT
의 URL에 특수문자들이 포함되는데 해당 문자들에 대한 인코딩이 안되서 그런것인가? 싶어 직접 아래와 같이 변경하였다.
MailerModule.forRootAsync({
useFactory: () => ({
transport: {
transport: `smtps://${process.env.EMAILADDRESS}:${process.env.EMAILPASSWORD}@smtp.naver.com`,
},
defaults: {
from: `'TaeHyeongBNB' <${process.env.EMAILADDRESS}>`,
},
}),
}),
위와 같이 변경하는 과정에서 문제점이 from의 process.env.EMAILADDRESS
에서 발견되었다. 아이디만 적어놓고 메일주소를 따로 적지 않아서 문제인 사소한 문제였다. 해당사항을 해결하고 다시 메일을 보내보니 다음 에러가 발생했다.
연결 거부! 연결이 왜 거부되었을까? 네이버의 smtp포트정보에 가면 보안연결(TLS)필요 라고 적혀있다. 내가 지금 로컬환경에서 개발을하면서 메일을 보내려고 하기 때문에 거부된걸까?
위에 tranport내용을 보면 smtp에 적절한 port를 적어주지 않는다. 왜?
분명 네이버 등 다른 smtp를 사용할때 각자의 port번호를 가르쳐주는데 예시 템플릿에는 적지 않는 것일까?
되도록이면 다른 포스팅은 참고하지 않고 공식문서에 맞게끔 작성하려고 노력하는 타입이라 더욱 어려웠던 것 같다.
다른 포스팅은 아무도 transport를 위와 같은 하나의 URL로 표현하지 않고 host, port, auth로 나눠서 작성되어 있었다.
MailerModule.forRootAsync({
useFactory: () => ({
transport: {
host: 'smtp.naver.com',
port: 587,
auth: {
user: `${process.env.EMAILADDRESS}`,
pass: `${process.env.EMAILPASSWORD}`,
},
},
defaults: {
from: `'TaeHyeongBNB' ${process.env.EMAILADDRESS}`,
},
}),
}),
위와 같이 나눠서 작성하니 정상적으로 메일이 보내진다. 공식문서의 예시템플릿을 마냥 믿고 적은게 화근이었던 것 같다.