메일 전송 오류

권태형·2023년 6월 5일
0

bnb Back-Server Project

목록 보기
16/31

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}`,
        },
      }),
    }),

위와 같이 나눠서 작성하니 정상적으로 메일이 보내진다. 공식문서의 예시템플릿을 마냥 믿고 적은게 화근이었던 것 같다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글