spring 18강 이메일 보내기
이메일 서비스 구축 방법
이메일 발송을 위해서는 메일 서버가 필요함
- 자체 구축 OR
- 포털사이트에서 제공하는 smtp(Simple Mail Transfer Protocol) server 활용 (제약 존재)
- gmail의 경우 : 내 계정 - 로그인 및 보안 - 기기 활동 및 보안관련 활동 - 보안 수준이 낮은 앱 허용 옵션을 사용으로 설정해야함
실습 예제
model.email. EmailDTO.java
service.email. EmailService / Imple.java
controller.email. EmailController.java
write.jsp
1. pom.xml에 라이브러리 추가 [ artifactId : mail ( groupId : javax.mail ) ] //최신버전으로
1 2 3 4 5 6 7 8 9 10 11 | <!-- 이메일 발송 관련 라이브러리 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> //추가(왜 하는진 설명X) <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework-version}</version> </dependency> |
Context Support는 애플리케이션 컨텍스트 컨테이너에서 사용되어지지만 자주 사용되지 않는 부가적인 기능들을 분리해 놓은 것이다. 캐쉬, 메일, 스케줄링, UI와 관련된 기능들이 포함되어 있다.
( 참고 : http://toby.epril.com/?p=623 )
2. root-context에 메일 발송을 위한 bean 등록/설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <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" /> <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.debug">true</prop> </props> </property> </bean> |
스프링에서 제공하는 JavaMailSenderImpl 클래스
email기능을 구현할 때 JavaMailSenderImpl 객체 사용을 위한 root-context에 설정
(root-context에 설정 하고말고는 뭘로 결정되는지...)
★★★
위 설정 코드를 대략적으로 풀어보자면
JavaMailSenderImpl 타입의 mailSender 객체는 host, port, username, password, javaMailProperties 변수를 가지는데
javaMailProperties 는 mail.transport.protocol / smtp 등의 key / value 값을 가진다는 설정
사용 예시 더 살펴보기(참고) : https://ddakker.tistory.com/167
admin_menu.jsp
<a href="${path}/email/write.do">이메일 발송</a>
EmailDTO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package com.example.spring02.model.email; public class EmailDTO { private String senderName; private String senderMail; private String receiveMail; private String subject; private String message; //getter,setter,toString public String getSenderName() { return senderName; } public void setSenderName(String senderName) { this.senderName = senderName; } public String getSenderMail() { return senderMail; } public void setSenderMail(String senderMail) { this.senderMail = senderMail; } public String getReceiveMail() { return receiveMail; } public void setReceiveMail(String receiveMail) { this.receiveMail = receiveMail; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Override public String toString() { return "EmailDTO [senderName=" + senderName + ", senderMail=" + senderMail + ", receiveMail=" + receiveMail + ", subject=" + subject + ", message=" + message + "]"; } } | cs |
EmailServiceImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.example.spring02.service.email; import javax.inject.Inject; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import com.example.spring02.model.email.EmailDTO; @Service //서비스 빈으로 등록 public class EmailServiceImpl implements EmailService { @Inject JavaMailSender mailSender; //root-context.xml에 설정한 bean @Override public void sendMail(EmailDTO dto) { try { //이메일 객체 MimeMessage msg=mailSender.createMimeMessage(); //받는 사람 msg.addRecipient(RecipientType.TO, new InternetAddress(dto.getReceiveMail())); //보내는 사람(이메일주소+이름) msg.addFrom(new InternetAddress[] { new InternetAddress(dto.getSenderMail(),dto.getSenderName()) }); //이메일 제목 msg.setSubject(dto.getSubject(),"utf-8"); //이메일 본문 msg.setText(dto.getMessage(), "utf-8"); //html로 보낼 경우 // MimeMessage message = mailSender.createMimeMessage(); // MimeMessageHelper helper //= new MimeMessageHelper(message, true); // helper.setTo("test@host.com"); // // helper.setText("<html><body><img src='cid:identifier1234'></body></html>", true); //이메일 보내기 mailSender.send(msg); } catch (Exception e) { e.printStackTrace(); } } } | cs |
EmailController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package com.example.spring02.controller.email; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.example.spring02.model.email.EmailDTO; import com.example.spring02.service.email.EmailService; @Controller @RequestMapping("email/*") public class EmailController { @Inject EmailService emailService; @RequestMapping("write.do") public String write() { return "/email/write"; } @RequestMapping("send.do") public String send(@ModelAttribute EmailDTO dto, Model model) { try { emailService.sendMail(dto); model.addAttribute("message","이메일이 발송되었습니다."); } catch (Exception e) { e.printStackTrace(); model.addAttribute("message","이메일 발송 실패..."); } return "/email/write"; } } | cs |
'Java > study' 카테고리의 다른 글
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ~ (0) | 2019.06.13 |
---|---|
NIO기반 네트워킹 (0) | 2019.04.25 |
NIO기반 입출력 (0) | 2019.04.24 |
스레드풀(ThreadPool) (0) | 2019.04.24 |
IO기반 네트워킹 (0) | 2019.04.22 |