Spring framwork
17주차 - Spring (22) 스프링에서 메일을 보내보자.
우젼
2022. 10. 25. 20:41
이번의 목표
01. 스프링에서 지메일을 보내보자.
지난 시간엔 스프링에서 메일을 보내기 위해 JavaMail API JAR, Spring Context Support를 설치했습니다. 이번에는 이를 이용하여 지메일을 보내는 방법에 대해 공부해 보겠습니다.
01) Config 파일 생성
스프링에서 메일을 보내기 위해 먼저 Config 파일을 생성합니다.
import java.util.Properties;
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 {
@Bean
public JavaMailSender mailSender() {
JavaMailSenderImpl jms = new JavaMailSenderImpl();
jms.setHost("smtp.gmail.com");
// smtp - > simple mail tranfer protocol
// pop3도 사용되는데 지메일에서는 smtp를 사용한다.
// 글로 풀어서 보자면 =>> 어떤 프로토콜. 지메일을 이용해서. com 대략 이런 느낌인 것같다.
jms.setPort(587); // 지메일 서버가 사용하는 포트 번호
jms.setUsername("user@gmail.com"); // 발신 email
jms.setPassword("griesggscxbmwdeg"); // 비밀번호 // 실제 지메일 비밀번호가 아닌, 프로그램에서 사용하는 비밀번호
Properties pro = new Properties(); // 속성 정보를 담는 객체
pro.setProperty("mail.transport.protocol", "smtp"); // 메일 전송 프로토콜은, smtp
pro.setProperty("mail.smtp.auth", "true");
pro.setProperty("mail.smtp.starttls.enable", "true"); //start한다 tls를.
jms.setJavaMailProperties(pro);
return jms;
}
}
아래는 실제 메일 보내기 위한 코드입니다.
@Autowired
private JavaMailSender mailSender;
// MailConfig의 정보를 기반으로 빈 생성
// 그러니까 이게 생성이 안되고 에러가 나오면 MailConfig가 잘못 작성된 것이니 체크하자
public void sendMail(String to, String subject, String content) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
// Mime?? -> 데이터의 형식. mime의 형식으로 보내면 smtp 프로토콜을 이용해서 메일을 보낸다.
messageHelper.setSubject(subject); // 이메일의 제목
messageHelper.setText(content);// 이메일의 본문
messageHelper.setTo(to); // 수신자
mailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
메일을 보내기 위해선 먼저 JavaMailSender 빈을 생성해야합니다. 이때 빈 생성에 문제가 발생했다면 이는 config에서 세팅값 자체가 잘못된 것이니 확인을 해봅시다.
이메일에 텍스트 외의 자료를 첨부하여 발송하는 것은 다음에 공부해보겠습니다.