개발 수업/Spring

[spring] 메일 발송

오늘 하루s 2023. 8. 18. 22:23
728x90
더보기

Day77. 230818

 

1. pom.xml 설정

dependencies 추가

<!-- 이메일 -->
  <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context-support</artifactId>
     <version>${org.springframework-version}</version>
  </dependency>
  <dependency>
     <groupId>javax.mail</groupId>
     <artifactId>javax.mail-api</artifactId>
     <version>1.5.4</version>
  </dependency>
  <dependency>
     <groupId>com.sun.mail</groupId>
     <artifactId>javax.mail</artifactId>
     <version>1.5.3</version>
  </dependency>

 

 

2. mail-context.xml설정

scr/main/webapp/WEB-INF/spring 위치에 mail-context.xml를 만들어 준다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	  <property name="host" value="smtp.gmail.com" />
	  <property name="port" value="587" />
	  <property name="username" value="송신자@gmail.com" />
	  <property name="password" value="메일비밀번호" />
	  <property name="javaMailProperties">
	    <props>
	       <prop key="mail.transport.protocol">smtp</prop>
	       <prop key="mail.smtp.auth">true</prop>
	       <prop key="mail.smtp.starttls.enable">true</prop>
	       <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
	       <prop key="mail.debug">true</prop>
	    </props>
	  </property>
	</bean>
 
	<!-- You can have some pre-configured messagess also which are ready to send -->
   <bean id="preConfiguredMessage" class="org.springframework.mail.SimpleMailMessage">
   <property name="to" value="수신자@naver.com"></property>
   <property name="from" value="송신자@gmail.com"></property>
   <property name="subject" value="테스트 메일입니다."/>
   </bean>
</beans>

 

 

3. MailController 생성

package com.mycom.admin.member.controller;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.mycom.admin.member.service.MailServiceImpl;

//관리자-회원관리-메일관련
@Controller
public class MailController {
	
	@Autowired
	private MailServiceImpl mailServiceImpl;

	@RequestMapping(value = "/admin/member/sendMail")
	public void sendMail(HttpServletRequest request, HttpServletResponse response) throws Exception {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		String body ="";
		body ="<html><head></head><body><h2>안녕하세요.</h2></body></html>";
	
		//메일의 메세지 관련 설정
		mailServiceImpl.sendMail("lry9478@naver.com","this is a subject",body);
		
		out.print("email을 발송했습니다..");
	}
	
}

 

 

4. MailServiceImpl 생성

package com.mycom.admin.member.service;

import java.io.UnsupportedEncodingException;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

@Service
public class MailServiceImpl {
	
	//mail-context.xml문서에서 빈으로 등록
	@Autowired
	private JavaMailSender mailSender;

	public void sendMail(String to, String subject, String body) {
		
		MimeMessage message = mailSender.createMimeMessage();
		try {
			MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message,true,"UTF-8");
			mimeMessageHelper.setTo(to);					//수신자
			mimeMessageHelper.setSubject(subject);				//메일제목
			mimeMessageHelper.setFrom("aa@gmial.com","관리자");		//발신자
			mimeMessageHelper.setText(body,true);				//메일내용
			mailSender.send(message);
		} catch (MessagingException | UnsupportedEncodingException e) {
			e.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

 

 

5. 메일 인증

google 메일의 경우 보안 - 2단계 인증을 통해 앱비밀번호를 생성한다.

 

생성된 앱 비밀번호를 mail-context.xml 메일비밀번호에 입력해준다.

 

 

6. 실행

MailController실행

보낸메일함, 받은 메일 확인 해보니 잘 전송 되었다.

 

728x90