코딩마을방범대

Java로 메일 가져오기 본문

💡 백엔드/Java

Java로 메일 가져오기

신짱구 5세 2023. 5. 26. 09:47
728x90

SMTP / POP3 / IMAP란?

SMTP

  • 편지를 쓰고 동네에 있는 우체통에 해당 편지를 넣는다.
    우체통: SMTP 서버
  • 웹 상에서 메일을 주고 받기 위해 이용되는 프로토콜(규약)
  • 클라이언트 측에서 메일 서버로 메일을 보낼 때 사용
  • 클라이언트가 이메일을 보내면 바로 상대편의 컴퓨터로 메일을 송신하는 것이 아니라,
    중간에 메일 서버를 거치게 됨

POP3

  • 집배원이 해당 우체통에 있는 모든 편지를 가져간다.
    집배원: POP3 서버
  • 사용자의 기기로 이메일을 다운로드하여 읽는 프로토콜(다운로드한 내용은 서버에서 삭제되기에 동일한 기기에서만 이메일 확인 가능)

IMAP

  • 받는이가 사는 동네 우체국으로 편지가 분배 된다.
    POP3 서버에 의해 해당 이메일이 전송 된다.
  • 서버에서 이메일을 읽는 프로토콜(여러가지의 디바이스에서 접속하여도 동일한
    정보를 확인할 수 있음)
  • 어떤 상황에서든 동일한 내용을 읽어올 수 있음

메일 발송을 위해 필요한 부분
메일 서버(SMTP Server)




 


 

 

 

 

 

 

Java Mail 핵심 요소

1. Session

  • Java Mail API를 사용할 수 있게 해주는 클래스
  • 다양한 메일 프로바이더 구현(Service Provider Implementation; SPI)을 나타내는 클래스를 로딩하고 제어할 수 있는 메소드 제공

2. Store

  • 특정한 메일 프로토콜을 이용해 읽기,쓰기,감시,검색 가능
  • 메일 저장소를 추상화한 Folder에 접근할 수 있게 해줌

3. Folder

  • 메일 메시지에 접근할 수 있게 해줌
  • 메일 메시지는 Message 클래스의 객체로 표현됨

4. Transport

  • 메시지를 전송할 때 사용

5. Message

  • 제목,메일주소,날짜 등의 실제 메일 세부 사항을 나타내는 객체





 

 

 

 

세팅법

1. build.gralde

// https://mvnrepository.com/artifact/javax.activation/activation
implementation group: 'javax.activation', name: 'activation', version: '1.1.1'
// https://mvnrepository.com/artifact/javax.mail/mail
implementation group: 'javax.mail', name: 'mail', version: '1.4.7'

 


 

 

2. Service

Property에 SMTP 서버 정보 설정 후 세션 연결

  • imaps 방법과 pop3 방법이 있음
Properties props = System.getProperties();
// smtp 서버 설정
// props.put("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.store.protocol", "imaps");

Session session = Session.getInstance(props, null); // 세션 smtp 시작

 

Store 연결

// Store store = session.getStore("pop3");
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", username, password);

 

Folder 설정

  • pop3: 폴더가 INBOX만 있음
    imaps: INBOX 말고도 사용자 폴더가 따로 있음
// 받은편지함을 INBOX 라고 한다.
Folder folder = store.getFolder("INBOX");
// 속성인지 혹은 수정 속성인지 설정
folder.open(Folder.READ_WRITE);

 

메일 가져오기

// 받은 편지함에 있는 메일 모두 읽어오기
Message[] messages = folder.getMessages();

// 발신인
messages[0].getFrom()[0].toString()
// 메일 제목
messages[0].getSubject()

 

필요 시 메일 삭제

messages[0].setFlag(Flags.Flag.DELETED, true);

 

연결 끊기

  • folder.close: 파일 삭제를 원치 않을 경우 false
// folder와 store은 조회 후 꼭 close 해주어야함
// folder.close()에는 메시지 삭제 여부를 주어야함
// 실제 메시지가 삭제되는 시점은 folder를 close하는 시점
folder.close(true);
store.close();

 

 

728x90

'💡 백엔드 > Java' 카테고리의 다른 글

Log - (1) Log4j  (0) 2023.05.27
Contoller의 오류  (0) 2023.05.27
Date 비교 메소드  (0) 2023.05.26
Entity에서 암복호화 & JAVA 비동기 처리(Thread)  (0) 2023.05.26
Java로 메일 발송하기  (0) 2023.05.26