본문 바로가기
개발/spring

[Spring Boot] 메일 발송하기 예제 (Gmail)

by 아크투어 2023. 4. 27.
반응형

Spring Boot 메일발송

 

Gmail

인터넷을 통해 이메일을 보내고 받을 수 있도록 Google에서 제공하는 무료 이메일 서비스 입니다.

 

Spring Boot Smtp

SMTP(Simple Mail Transfer Protocol)를 통해 이메일 메시지를 보내는 기본 지원을 제공합니다.

 

gmail service
gmail service

 

1. build.gradle / pom.xml

implementation 'org.springframework.boot:spring-boot-starter-mail'
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 

2. application.properties / application.yml

#gmail
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=아이디
spring.mail.password=비밀번호
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true
spring :         
    mail :
        host : smtp.gmail.com
        port : 587
        username : 아이디
        password : 비밀번호
        properties :
            mail :
                smtp :
                    auth : true
                    starttls :
                        enable : true

 

3.EmailTemplate.java

  • 메일발송을 위한 템플릿 파일을 관리하기위한 EmailTemplate.java 파일을 생성한다.
import org.springframework.stereotype.Service;

@Service("template")
public class EmailTemplate {

    public EmailTemplate() {
        super();
    }
	
    public String idFindTemplate() throws Exception{
        StringBuffer sb = new StringBuffer(); 
        sb.append("<!doctype html>");
        sb.append("<html>");
        sb.append("<head>");
        ....
        중략
        ...
        sb.append("</html>");
        return sb.toString();
    }
}

 

4. 메일발송처리 함수구현

  • sendMail() 함수에서 실제로 메일을 발송한다.
import org.springframework.mail.MailAuthenticationException;
import org.springframework.mail.MailParseException;
import org.springframework.mail.MailSendException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

...

@Autowired
private JavaMailSender mailSender;

@Autowired
private EmailTemplate template;

....

public boolean sendMail() throws Exception {
	
    String content = template.idFindTemplate();
        
    try {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
			
        messageHelper.setFrom('보내는사람메일주소',"무슨무슨서비스");
        
        /*** 받는사람 VO 관련 start ***/
        //private String receiver;        
        //private String[] receiverArr;
        messageHelper.setTo(vo.getReceiver()); //한명 발송됨
        messageHelper.setTo(vo.getReceiverArr()); //여러명 발송됨
        /*** 받는사람 관련 end ***/
        
        messageHelper.setSubject('제목');	
        messageHelper.setText(content, true);
        mailSender.send(message);
    } catch (MailParseException ex) {			
        LOGGER.error("Sending Mail Exception : {} [failure when parsing the message]", ex.getCause());
        return false;
    } catch (MailAuthenticationException ex) {
        LOGGER.error("Sending Mail Exception : {} [authentication failure]", ex.getCause());
        return false;
    } catch (MailSendException ex) {
        LOGGER.error("Sending Mail Exception : {} [failure when sending the message]", ex.getCause());
        return false;
    } catch (Exception ex) {
        LOGGER.error("Sending Mail Exception : {} [unknown Exception]", ex.getCause());
        return false;
    } 
    return true;
}

 

 

5. TIP

  • 여러명 보낼때 배열처리관련
//예시
List<?> receiverList = dao.selectReceiverList();
String[] receiver = null;
					
if(receiverList.size() > 0) {
    receiver = new String[receiverList.size()];
    
    for(int i=0; i<receiverList.size(); i++) {
        receiver[i] = receiverList.get(i).getEmailAddress().toString();
    }
}				

MailVO mailVO = new MailVO();
mailVO.setReceiverArr(receiver);


//VO파일
private String[] receiverArr;
반응형

'개발 > spring' 카테고리의 다른 글

[Spring] mybatis foreach 사용예제 (java코드포함)  (0) 2023.04.14