SMTP는 Simple Mail Transfer Protocol의 약자로, 인터넷에서 이메일을 보내기 위해 사용되는 프로토콜이다.
SMTP는 이메일 클라이언트나 다른 SMTP 서버로부터 이메일을 수신하는 메일 서버로 이메일을 전송하는 데 사용된다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
transport:
protocol: smtp
host: smtp.gmail.com
port: 587
username: 아이디 #gmail ID
password: 비밀번호 #gmail 앱 비밀번호
@Configuration
public class MailConfiguration {
@Value("${spring.mail.smtp.auth}")
private String smtpAuth;
@Value("${spring.mail.transport.protocol}")
private String transportProtocol;
@Value("${spring.mail.smtp.starttls.enable}")
private String smtpStarttlsEnable;
@Value("${spring.mail.smtp.starttls.required}")
private String smtpStarttlsRequired;
@Value("${spring.mail.host}")
private String host;
@Value("${spring.mail.port}")
private int port;
@Value("${spring.mail.username}")
private String username;
@Value("${spring.mail.password}")
private String password;
@Bean
public JavaMailSender javaMailSender(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(host); // SMTP 서버명
javaMailSender.setUsername(username); // 아이디
javaMailSender.setPassword(password); // 비밀번호
javaMailSender.setPort(port); // SMTP 포트
javaMailSender.setDefaultEncoding("UTF-8");
javaMailSender.setJavaMailProperties(this.getMailProperties());
return javaMailSender;
}
private Properties getMailProperties(){
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", smtpAuth); // SMTP 인증
properties.setProperty("mail.transport.protocol", transportProtocol); // 프로토콜 설정
properties.setProperty("mail.smtp.starttls.enable", smtpStarttlsEnable); // SMTP strattles 사용
properties.setProperty("mail.smtp.starttls.required", smtpStarttlsRequired);
return properties;
}
}
STARTTLS는 기존의 안전하지 않은 연결의 위험을 줄이고 SSL/TLS이 쓰이는 안전한 연결로 업그레이드하도록 도와준다.
public class MailUtils {
private JavaMailSender mailSender;
private MimeMessage message;
private MimeMessageHelper messageHelper;
public MailUtils(JavaMailSender mailSender) throws MessagingException {
this.mailSender = mailSender;
message = this.mailSender.createMimeMessage();
messageHelper = new MimeMessageHelper(message, true, "UTF-8");
}
public void setSubject(String subject) throws MessagingException {
messageHelper.setSubject(subject);
}
public void setText(String htmlContent) throws MessagingException {
messageHelper.setText(htmlContent, true);
}
public void setFrom(String email, String name) throws UnsupportedEncodingException, MessagingException {
messageHelper.setFrom(email, name);
}
public void setTo(String email) throws MessagingException {
messageHelper.setTo(email);
}
public void send() {
mailSender.send(message);
}
}
@RequestMapping("/devlog/mail")
@RestController
@RequiredArgsConstructor
public class SmtpTestController {
private final JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String mailUsername;
@PostMapping(value = "/generatekey-send", produces = MediaType.APPLICATION_JSON_VALUE)
public void send(String targetEmail) throws Exception{
String sAuthCode = UUID.randomUUID().toString();
MailUtils sendMail = new MailUtils(javaMailSender);
sendMail.setSubject("이메일 인증");
String msg = "";
msg += "<h1>안녕하세요</h1>";
msg += "<br>";
msg += "<p>아래 인증코드를 페이지에 입력해주세요</p>";
msg += "<br>";
msg += "<br>";
msg += "<div align='center' style='border:1px solid black'>";
msg += "<h3 style='color:blue'>인증코드 입니다</h3>";
msg += "<div style='font-size:130%'>";
msg += "<strong>" + sAuthCode + "</strong></div><br/>" ;
msg += "</div>";
sendMail.setText(msg);
sendMail.setFrom(mailUsername, "DevLog");
sendMail.setTo(targetEmail);
sendMail.send();
}
}
댓글 영역