Java/오류노트

[Java/오류노트] Solved - Failed message 1: org.eclipse.angus.mail.smtp.SMTPSendFailedException: 554 5.7.1 The sender address is unauthorized - nsmtp

adjh54 2024. 11. 11. 22:56
728x170
해당 글에서는 Java 언어 기반 Spring Boot Mail을 사용 중에 발생하는 오류에 대해 해결 방법에 대해 알아봅니다.


 

1) 문제점


💡문제점

- Spring Boot Mail을 활용하여 메일 전송을 테스트 하는 중에 아래와 같은 오류가 발생하였습니다.

- Failed message 1: org.eclipse.angus.mail.smtp.SMTPSendFailedException: 554 5.7.1 The sender address is unauthorized - nsmtp

 

 

 

 

2) 해결방법


💡 해결방법

- Gmail의 SMTP 서버를 활용할때는 발생하지 않던 오류였으나, Naver를 사용하는 경우 발생하는 문제였습니다.
- 관련 글을 찾아보니 Gmail에서는 보내는 사람(from)을 지정하지 않아도 되지만, Naver에서는 반드시 보내는 사람(from)을 지정해야 한다는 문제였습니다.
💡기존의 이메일 전송을 위한 비즈니스 로직 부분입니다.

- 아래의 경우에도 SimpleMailMessage의 값을 구성하는데 .setFrom() 값을 구성하지 않고 있습니다.
@Service
public class MailSendServiceImpl implements MailSendService {
    private final JavaMailSender mailSender;
    private final TemplateEngine templateEngine;

    public MailSendServiceImpl(JavaMailSender mailSender, TemplateEngine templateEngine) {
        this.mailSender = mailSender;
        this.templateEngine = templateEngine;
    }

    /**
     * 텍스트 기반 메일 전송
     *
     * @param mailTxtSendDto
     */
    @Override
    public void sendTxtEmail(MailTxtSendDto mailTxtSendDto) {
        SimpleMailMessage smm = new SimpleMailMessage();
        smm.setTo(mailTxtSendDto.getEmailAddr());               // 받는 사람 이메일
        smm.setSubject(mailTxtSendDto.getSubject());            // 이메일 제목
        smm.setText(mailTxtSendDto.getContent());               // 이메일 내용
        try {
            mailSender.send(smm);                   // 메일 보내기
            System.out.println("이메일 전송 성공!");
        } catch (MailException e) {
            System.out.println("[-] 이메일 전송중에 오류가 발생하였습니다 " + e.getMessage());
            throw e;
        }
    }
}

 

💡 아래와 같이 환경 파일 내에서 불러와서 호출하도록 구성하였습니다.

- EMAIL_SENDER를 환경 파일 내에서 호출하고 smm.setFrom(EMAIL_SENDER) 를 통해 속성을 추가하였습니다.
@Service
public class MailSendServiceImpl implements MailSendService {
    private final JavaMailSender mailSender;
    private final TemplateEngine templateEngine;

    public MailSendServiceImpl(JavaMailSender mailSender, TemplateEngine templateEngine) {
        this.mailSender = mailSender;
        this.templateEngine = templateEngine;
    }

    @Value("${spring.mail.username}")
    private String EMAIL_SENDER;

    /**
     * 텍스트 기반 메일 전송
     *
     * @param mailTxtSendDto
     */
    @Override
    public void sendTxtEmail(MailTxtSendDto mailTxtSendDto) {
        SimpleMailMessage smm = new SimpleMailMessage();
        smm.setTo(mailTxtSendDto.getEmailAddr());               // 받는 사람 이메일
        smm.setFrom(EMAIL_SENDER);                              // [해당 부분 추가!!!] 보내는 사람 추가
        smm.setSubject(mailTxtSendDto.getSubject());            // 이메일 제목
        smm.setText(mailTxtSendDto.getContent());               // 이메일 내용
        try {
            mailSender.send(smm);                   // 메일 보내기
            System.out.println("이메일 전송 성공!");
        } catch (MailException e) {
            System.out.println("[-] 이메일 전송중에 오류가 발생하였습니다 " + e.getMessage());
            throw e;
        }
    }
}

 

 

3) 결과 확인


 💡 결과 확인

- 아래와 같이 호출을 하였습니다.

 

💡 아래와 같이 결과가 출력됨을 확인하였습니다.

 

 

 

오늘도 감사합니다 😀

 

그리드형