코딩마을방범대
Java로 메일 가져오기 본문
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 |