아직 해결되지 않은 문제가 있긴하지만 어찌어찌 구현은 하였다. (하단에 기술)
새로 추가된 코드들
발신자,수신자,제목,본문 등을 설정하고 메일을 보낸다.
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에서는 메일설정을 담당한다.(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에서 회원가입 메소드에 추가로 회원가입 시 메일을 발송하는 코드를 넣어준다.
@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" 뷰를 반환
}
해결하지 못한 문제
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");
이런식으로 계정과 비밀번호를 바로 기입하면 문제가 없이 잘 작동한다.
왜 이런 문제가 발생하는지는 좀 더 찾아봐야겠다.