[JAVA] SMTP를 이용하여 메일 전송하기

hanana·2023년 12월 12일
0

개발환경

JDK : 17
SpringBoot 2.7.11

※ 단순히 dto를 받아서 메일만 전송하는 역할만을 수행하므로
재사용 가능성이 낮다고 판단하여 @Controller, @Service 외에는 Bean으로 설정하지 않고 진행했다.

STEP1. build.gradle 추가

build.gradle에 두 코드를 추가한다.

// 메일전송
implementation 'com.sun.mail:jakarta.mail'
implementation 'org.springframework:spring-context-support'

STEP2. 컨트롤러매핑

@PostMapping("/newPassword")
@ResponseBody
public Boolean newPassword(@RequestBody myDto dto) {
    return mailService.sendMail(dto);
}

STEP3. 메일 컨텐츠 작성

* STEP2의 mailService.sendMail(dto) 구현

public Boolean sendMail(myDto dto) {

	// dto 구성(예시)
	/*
    	String sender; // 송신자 메일주소
        String recipient; // 수신자 메일주소
        String cc; // 참조자 이메일
    */
    
    
    JavaMailSenderImpl mailSender = mailSender();

    try {
        MimeMessage message = mailSender.createMimeMessage();

        message.setFrom(new InternetAddress(dto.getSender()));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(dto.getRecipient()));

          if(dto.getCc() != null && !dto.getCc().equals("")) {
              message.setRecipient(Message.RecipientType.CC, new InternetAddress(dto.getCc()));
          }

        message.setText("한번에 되면 대박쓰"); // 메일 본문
        message.setSubject("메일이 날라갑니당"); //  메일 제목

        mailSender.send(message);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    return true;

}

    
// 경우에 따라서 별도 @Bean으로 설정하여 사용도 가능
private static JavaMailSenderImpl mailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

	  // userName, password 생략시
      // 인증절차 없이 메일전송 가능
      mailSender.setHost("${smtp_host}"); // 메일서버 호스트
      mailSender.setPort(Integer.parseInt("${smtp_port}")); // 메일서버 포트번호
      mailSender.setUsername("${smtp_id}"); // 송신자 아아디
      mailSender.setPassword("${smtp_password}"); // 송신자 비밀번호
      mailSender.setDefaultEncoding("utf-8");
      
      

	// 경우에 따라서 불필요한 내용들 주석처리 가능
	Properties javaMailProperties = new Properties();
	javaMailProperties.put("mail.smtp.starttls.enable", "false");
	javaMailProperties.put("mail.smtp.auth", "false");
	javaMailProperties.put("mail.smtps.ssl.checkserveridentity", "false"); // smtps?
	javaMailProperties.put("mail.smtps.ssl.trust", "*"); //smtps?
	javaMailProperties.put("mail.smtp.ssl.enable", "false");
	javaMailProperties.put("mail.debug", "true");
	javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
	mailSender.setJavaMailProperties(javaMailProperties);
    
    
	return mailSender;
    

}

결과


추가

저렇게 작성하니 메일 본문에 html요소를 담지 못하고 단순히 String 문자만 받고 있었다.
개행처리나 내용을 좀 더 예쁘게 만들 필요가 생겼다.

set

String mailText = "<p>안녕하세요&nbsp;제이름은&nbsp;<strong>"+박하나+"</strong>&nbsp;입니다.</p><p>앞으로도&nbsp;&nbsp;부탁&nbsp;드립니다.</p>";

//기존
// message.setText("한번에 되면 대박쓰"); // 메일 본문

// 두번째 인자로 "text/html; charset=UTF-8"
// 형식이 html임을표기, setText가 아닌 setContext로 변경
message.setContent(mailText,"text/html; charset=UTF-8"); // 메일 본문
profile
성숙해지려고 노력하지 않으면 성숙하기까지 매우 많은 시간이 걸린다.

0개의 댓글