회원가입 축하 자동메일 발송 SMTP

han.user();·2023년 8월 2일
0

아직 해결되지 않은 문제가 있긴하지만 어찌어찌 구현은 하였다. (하단에 기술)

새로 추가된 코드들

EmailService

발신자,수신자,제목,본문 등을 설정하고 메일을 보낸다.
mailSender는 MailConfig에서 설정한다.

package hankyungsoo.project.service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    private final JavaMailSender mailSender;

    @Autowired
    public EmailService(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendRegistrationConfirmationEmail(String email, String id) {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message);

        try {
            helper.setFrom("hanks7431@naver.com"); // 보내는 주소 설정
            helper.setTo(email);
            helper.setSubject("회원가입 축하 메일");
            helper.setText("안녕하세요 " + id + "님, 회원가입을 축하합니다!");
        } catch (MessagingException e) {
            e.printStackTrace();
            // 메일 전송 예외 처리
        }

        mailSender.send(message);
    }
}

EmailConfig

EmailConfig에서는 메일설정을 담당한다.(javaMailSender메소드)

package hankyungsoo.project.configuration;

import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class EmailConfig {

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

//    @Value("${spring.mail.password}")
//    private String password;
	
    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.naver.com");
        mailSender.setPort(587);
        mailSender.setUsername("hanks7431@naver.com");
        mailSender.setPassword("네이버 비밀번호");

        mailSender.setProtocol("smtp");

        // TLS를 사용하는 경우 추가
        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");
        
        return mailSender;
    }
}

MemberController

기존에 회원기능을 담당하는 MemberController에서 회원가입 메소드에 추가로 회원가입 시 메일을 발송하는 코드를 넣어준다.

		@PostMapping("/signup")
		public String signup(@RequestParam("id") String id, @RequestParam("username") String username,
				@RequestParam("password") String password, @RequestParam("email") String email,
				@RequestParam("phonenumber") String phoneNumber) {
			// MemberDTO 객체를 생성하고 전달받은 파라미터 값을 설정
			MemberDTO memberDTO = new MemberDTO();
			memberDTO.setId(id);
			memberDTO.setUsername(username);
			memberDTO.setPassword(password);
			memberDTO.setEmail(email);
			memberDTO.setPhoneNumber(phoneNumber);

			// MemberService의 signup 메서드를 호출하여 회원을 등록
			memberService.signup(memberDTO);
	        
	        // EmailService를 사용하여 회원가입 확인 이메일 전송
	        emailService.sendRegistrationConfirmationEmail(email, id);

			return "signupSuccess"; // "signupSuccess" 뷰를 반환
		}

해결하지 못한 문제

  • application.properties 에 메일계정 및 비밀번호 설정을 함.
spring.mail.username=hanks7431@naver.com
spring.mail.password=비밀번호

그리고, 아래와 같이 코드 작성

package hankyungsoo.project.configuration;

import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class MailConfig {

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

    @Value("${spring.mail.password}")
    private String password;
	
    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.naver.com");
        mailSender.setPort(587);
        mailSender.setUsername(username);
        mailSender.setPassword(password);

        mailSender.setProtocol("smtp");

        // TLS를 사용하는 경우 추가
        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");
        
        return mailSender;
    }
}

근데 왜 인지 모르겠지만 자꾸 계정정보가 틀린다고 오류가 나온다.

mailSender.setUsername("hanks7431@naver.com");

이런식으로 계정과 비밀번호를 바로 기입하면 문제가 없이 잘 작동한다.
왜 이런 문제가 발생하는지는 좀 더 찾아봐야겠다.

profile
I'm still hungry.

0개의 댓글