개발 수업/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