티스토리 뷰

반응형

토이프로젝트하면서 이메일을 전송해야 하는 기능을 구현해야 했다. Google 메일 서버를 이용해서 보내는 방법으로 spring 에서 작성하였다. 

 

 

아래는 spring 에서 작성한 메일 전송 코드 및 내용들이다.

- Google 메일 서버 이용

- Spring 이용

- text 형식으로 메일 전송 (그 외, template 등을 이용한 메일 전송을 원할 경우 하단 게시글 참고)

 

2022.02.10 - [토이프로젝트] - [ spring ] send HTML Email 방법 - ( Gmail 서버 이용 )

 

[ spring ] send HTML Email 방법 - ( Gmail 서버 이용 )

앞 글에서 기본적인 text 형식의 메일을 보내는 방법을 정리하였다. 2022.02.09 - [토이프로젝트] - [ spring ] send Email 방법 - ( Gmail 서버 이용 ) [ spring ] send Email 방법 - ( Gmail 서버 이용 ) 토이프..

tbmaster.tistory.com

 

- 코드 상에서 mail 서버 설정 (이럴 경우, 코드에 비밀번호를 입력해야 하므로, yml이나 properties 파일에 따로 작성하도록 한다.  해당 방법은 하단 reference 사이트 참고) 

 

 


 

 

코드

0. dependency 추가 

- spring-boot-starter-mail  추가

 

 

1. 메일 서버 설정

- Host : 이메일 전송 서버

- Port : 서버 포트 번호

- Username : 사용자 (여기서는 구글을 사용하므로, 구글 계정 이메일)

- Password : 비밀번호 (여기서는 구글을 사용하므로, 구글 계정 비밀번호)

- mail protocol : SMTP

- smtp authentication : 인증 사용 

- smtp TLS : TLS 사용 ( 구글 서버의 경우, TLS 연결을 필수로 함 )

    public EmailSender(){
        javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost("smtp.gmail.com");
        javaMailSender.setPort(587);
        javaMailSender.setUsername([구글 계정 이메일]);
        javaMailSender.setPassword([구글 계정 비밀번호]);

        Properties properties = javaMailSender.getJavaMailProperties();
        properties.put("mail.transport.protocol","smtp");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable","true");
        properties.put("mail.debug","true"); //로그 찍고 싶을 때

    }

 

 

2. 메일 내용 작성

- 보내는 사람 

- 받는 사람 

- 타이틀

- 본문

메일 작성에 필요한 내용들을 SimpleMailMessage 를 이용하여 작성한다.

    public void send(String email, String username){
        SimpleMailMessage message
                = new SimpleMailMessage();

        message.setFrom([보내는 사람]);
        message.setTo([받는 사람]);
        message.setSubject("test 제목");
        message.setText("test 내용");

        // javaMailSender.send(message);
    }

 

 

3. 메일 전송

1. 에서 설정한 JavaMailSenderImpl 를 이용하여 메일 전송 메소드를 호출하여, 메일을 전송한다.

    public void send(String email, String username){
        // SimpleMailMessage message
        //        = new SimpleMailMessage();

        // message.setFrom([보내는 사람]);
        // message.setTo([받는 사람]);
        // message.setSubject("test 제목");
        // message.setText("test 내용");

        javaMailSender.send(message);
    }

 

 

※ 참고사항

reference 사이트를 보면, google 계정 비밀번호의 경우, 오리지날 비밀번호가 아닌 앱 비밀번호를 입력하라고 한다. 따라서 앱 비밀번호를 설정하여, 코드에 적용하면 된다.

[ baeldung  내용 캡처 ] 

 

- 구글 앱 비밀번호 설정 방법

구글 계정 > 보안 > Google에 로그인 > 앱 비밀번호 설정

 

 

 

 

결과

[ 전체 코드 ]

 

 

 

 

 

내용

Spring framework에서는 아래와 같은 Java mail 관련 interface 와 class를 지원한다. 

- MailSender interface : 간단한 email을 전송하기 위한 기본적인 기능들을 제공하는 상위 레벨 인터페이스

- JavaMailSender interface : MailSender의 하위 인터페이스, MimeMessageHelper 와 함께 사용하여 MIME message를 지원 ( MimeMessagePreparator 인터페이스를 이용하는 것을 권고함)

- JavaMailSenderImpl class : JavaMailSender 인터페이스의 구현체이며, MimeMessage 와 SimpleMailMessage를 지원

- SimpleMailMessage class : 단순한 mail message를 생성 (to, from, cc, subject, text 등등)

- MimeMessagePreparator interface : MimeMessage를 준비하기 위한 콜백 인터페이스

- MimeMessageHelper class : MimeMessage 생성을 위한 Helper 클래스, HTML layout 을 이용하거나, 메일 첨부, 이미지 지원을 제공

 

 

 

SMTP ( Simple Mail Transfer Protocol )

인터넷에서 이메일을 전송하기 위한 프로토콜이다.

TCP 포트 25번을 사용한다.

SMTP는 텍스트 기반의 프로토콜로써, request/response  메시지 뿐만 아니라 모든 문자가 7bit ASCII 로 되어 있어야 한다. 따라서, 8bit 이상의 코드를 사용하는 언어나 첨부파일에 사용하는 각종 바이너리는 MIME 방식을 이용해 7bit로 변환되어 전달된다. 

SMTP 에는 사용자 인증절차가 규정되지 않았었지만, 인터넷 보급과 함께 필요성이 요구되어, SASL 메커니즘을 이용한 인증기구가 SMTP-AUTH로 표준화되었다. 인증방식은 PLAIN, LOGIN, DIGEST-MD5, CRAM-MD5 등이 이용된다.

( 이것 때문에 google smtp server 설정에 auth 를 true로 하는 것인가보다.... )

 

 

 

 

Reference 

https://www.baeldung.com/spring-email

https://ko.wikipedia.org/wiki/%EA%B0%84%EC%9D%B4_%EC%9A%B0%ED%8E%B8_%EC%A0%84%EC%86%A1_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

간이 우편 전송 프로토콜 - 위키백과, 우리 모두의 백과사전

간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 사용하는 TCP 포트번호는 25번이다. 상대 서버를 지시하기 위해서 DNS의 MX

ko.wikipedia.org

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
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
글 보관함